PHP PDO 插入 MySQL 错误 SQL 语法

标签 php mysql syntax pdo

我刚刚开始使用这个新的 php PDO,并且遇到了这个问题。我有一个数据库,其中设置了大约 19 个字段的表。有些是由数据库本身自动处理的,因此代码的插入部分被省略。

当进程尝试将电话号码输入数据库时​​,会出现错误。数据库设置为接受 12 varchar。该号码也有 12 varchar,但是当我查看调试信息时,看起来整个函数省略了电话号码的最后一位数字并给了我一个错误:

array (
  0 => '42000',
  1 => 1064,
  2 => 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \')

我不确定这里发生了什么。如果有人能指出我正确的方向,那就太好了。这是我的脚本代码。

<?php
require_once('../wp-includes/class-phpass.php');

//Create var names
$first_name = $_POST['F_Name'];
$last_name = $_POST['L_Name'];
$phone_number_1 = $_POST['Pnumber1'];
$phone_number_2 = $_POST['Pnumber2'];
$address = $_POST['Address'];
$state = $_POST['State'];
$city = $_POST['City'];
$zip_code = $_POST['Zip'];
$email_1 = $_POST['Email1'];
$email_2 = $_POST['Email2'];
$username = $_POST['Uname'];
$password_1 = $_POST['Pass'];
$jed = $_POST['Jednostka'];
$dob = $_POST['DOB'];
$stopien = $_POST['Stopien'];
$funk = $_POST['FUNK'];
$fullName = $_POST['F_name'].' '.$_POST['L_name'];  
$hasher = new PasswordHash(8, True);
$password = $hasher->HashPassword($password_1);
$ENC =MD5($password_1);
$ERRmsg = "";

    //Checks if any feilds were left empty and creates an error message to display
        if(empty($first_name)) $ERRmsg .= 'You did not enter a First Name!  Pleaase go back and try again! <br/>';
        if(empty($last_name)) $ERRmsg .= 'You did not enter a Last Name!  Please go back and try again! <br/>';
        if(empty($phone_number_1)) $ERRmsg .= 'You did not enter a Phone Number!  Please go back and try again! <br/>';
        if(empty($address)) $ERRmsg .= 'You did not enter an Address!  Please go back and try again! <br/>';
        if(empty($state)) $ERRmsg .= 'You did not choose a State!  Please go back and try again! <br/>';
        if(empty($city)) $ERRmsg .= 'You did not enter a City!  Please go back and try again! <br/>';
        if(empty($zip_code)) $ERRmsg .= 'You did not enter a Zip Code.  Please go back and try again!<br/>';
        if(empty($email_1)) $ERRmsg .= 'You did not enter a Email.  Please go back and try again!<br/>';
        if(empty($email_2)) $ERRmsg .= 'You did not re-enter you Email.  Please go back and try again!<br/>';
        if(empty($username)) $ERRmsg .= 'You did not enter a Username.  Please go back and try again!<br/>';
        if(empty($password_1)) $ERRmsg .= 'You did not enter a password!  Please go back and try again!<br/>';
        if(empty($jed)) $ERRmsg .= 'You did not choose a Jednostka!  Please go back and try again!<br/>';
        if(empty($dob)) $ERRmsg .= 'You did not enter a Date of Birth!  Please go back and try again!<br/>';
        if(empty($stopien)) $ERRmsg .= 'You did not choose a Stopien!  Please go back and try again!<br/>';
        if(empty($funk)) $ERRmsg .= 'You did not enter a Funkcjia!  Please go back and try again!<br/>';
        if($email_1 !== $email_2) $ERRmsg .= 'Your emails did not match!  Please go back and try again!<br/>';

            //Checks to see if error message is empty, if empty does rest of code
            if(empty($ERRmsg))
            {
                try {
                $wdp = new PDO('mysql:host=localhost; dbname=***********', '***********', '***********');
                    echo "<p>Connected to Warta Database</p>\n";
                $wdp->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                        //prepare the SQL statement
                            $wdp_insert = $wdp->prepare
                            ("INSERT INTO Users( 
                            F_NAME,
                            L_Name,
                            P_number1,
                            P_number2,
                            Address,
                            City,
                            State,
                            Zip,
                            Email,
                            username,
                            password,
                            Jednostka,
                            DOB,
                            Stopien,
                            Funkcjia,
                            High,
                            Active,
                            user_email,
                            user_login,
                            user_pass,
                            user_nicename,
                            display_name,
                        )
                        VALUES (
                            :fname,
                            :lname,
                            :pnumber1,
                            :pnumber2,
                            :address,
                            :city,
                            :state,
                            :zip,
                            :email,
                            :username,
                            :password,
                            :jednostka,
                            :DOB,
                            :Stopien,
                            :funkcjia,
                            :jednostka,
                            0,
                            :email,
                            :username,
                            :password,
                            :fullname,
                            :fullname,
                        )"
                        );

                                //Bind the paramaters
                                $wdp_insert->bindParam(':fname', $first_name);
                                $wdp_insert->bindParam(':lname', $last_name);
                                $wdp_insert->bindParam(':pnumber1', $phone_number_1);
                                $wdp_insert->bindParam(':pnumber2', $phone_number_2);
                                $wdp_insert->bindParam(':address', $address);
                                $wdp_insert->bindParam(':city', $city);
                                $wdp_insert->bindParam(':state', $state);
                                $wdp_insert->bindParam(':zip', $zip_code);
                                $wdp_insert->bindParam(':email', $email_1);
                                $wdp_insert->bindParam(':username', $username);
                                $wdp_insert->bindParam(':password', $password);
                                $wdp_insert->bindParam(':jednostka', $jed);
                                $wdp_insert->bindParam(':DOB', $dob);
                                $wdp_insert->bindParam(':Stopien', $stopien);
                                $wdp_insert->bindParam(':funkcjia', $funk);
                                $wdp_insert->bindParam(':fullname', $fullName);

                        //Execute the prepared statement
                            $wdp_insert->execute();
                            echo ("<p>Insert complete</p>\n");
                } catch (PDOException $ex) {
                $msg = $ex->errorInfo;
                error_log(var_export($msg, true));
                die("<p>Sorry, there was an unrecoverable database error. Debug data has been logged.</p>");
                };

            }
            else {
                echo ($first_name .' '. $ERRmsg);
                exit;
            }

?>

任何帮助都会很棒!

最佳答案

这是你的 SQL

删除最后一个

display_name,:fullname,

关于PHP PDO 插入 MySQL 错误 SQL 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13547262/

相关文章:

带有面向对象 PHP 的 PHP 购物车

syntax - 为什么我的 RSS 提要重复某些条目?

php - 获取php数组的总和

php - Laravel ownsToMany 插入查询中的表顺序

php - "isset"函数的使用

php - 开发 Facebook 风格的新闻提要

php - PHP存储时间戳的数据库结构

javascript - codeigniter:使用 jquery 克隆方法对动态创建的文本字段进行验证

javascript - 在Javascript中使用多组括号来创建一种类型的数组?

Java注解: at variable initialization,但不能赋值?