【问题标题】:Debugging a SQL syntax error in PHP调试 PHP 中的 SQL 语法错误
【发布时间】:2014-12-18 06:56:57
【问题描述】:

我正在尝试在我的注册和登录页面上使用 PDO,并开始在我的注册页面上工作,但出现语法错误,不知道为什么。

错误如下:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“INSERT INTO users (id, name, username, password, lastname ,email) VALUES (?, ?,' 附近使用正确的语法

代码:

 if ($_SESSION["username"]){

 header("Location: home.php");
 }
else{
if(isset($_POST['firstname']) && isset($_POST['lastname']) &&    isset($_POST['username']) && isset($_POST['password']) && isset($_POST['cpassword'])  && isset($_POST['email'])){
     require('connect.php');

     $dusername = mysql_real_escape_string($_POST["username"]);
    $dfirstname = mysql_real_escape_string($_POST["firstname"]);
     $dpassword = md5(mysql_real_escape_string($_POST["password"]));
    $dlastname =mysql_real_escape_string($_POST["lastname"]);
    $demail =mysql_real_escape_string($_POST["email"]);




$dbhost = "xxxxxxx"; 
$dbname= "xxxxxx";
$dbuser = "xxxx";
$mysql_password = "xxxxx";



 try{


 $db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname.';charset=utf8',   

 ''.$dbuser.'',    

 ''.$mysql_password.'');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}

catch(PDOException $e){
echo $e->getMessage();
die();


}

 mysql_error();
  //According to user's input
 $register =mysql_query( "(INSERT INTO users (id, name, username, password, lastname,email)  VALUES (?, ?, ?, ?, ?)")or die(mysql_error());
 $register =$db->prepare($register);
 $register->execute(array($dfirstname,$dusername,$dpassword,$dlastname,$demail));

// Check username and password match
if ($register) {
// Set username session variable
$_SESSION['username'] = $_POST['username'];
// Jump to secured page
header('Location: home.php');
exit;
}
else{

  echo "<div class=\"error\">Error Signing Up... Make Sure all the require 

  fields         are correctly formatted. </div>";
    }
    }
 else{

 }
 }

更新了

  $register ="INSERT INTO users (id, name, username, password, lastname ,email) VALUES('',?, ?, ?, ?, ?)"or die(mysql_error());
  $register =$db->prepare($register);
  $register->execute(array('',$dfirstname,$dusername,$dpassword,$dlastname,$demail));

还是有错误

【问题讨论】:

  • INSERT INTO, 行是它说错误的地方
  • 你不能混用mysql_*函数和PDO方法,坚持PDO
  • 请添加错误信息。
  • 所以 mysql_query 我不需要它? @鬼
  • @FollowerofChrist 你不需要一点点,所有这些都可以用 PDO 完成

标签: php mysql pdo syntax


【解决方案1】:
$register->execute(array($dfirstname,$dusername,$dpassword,$dlastname,$demail));

应该是

$register->execute(array('',$dfirstname,$dusername,$dpassword,$dlastname,$demail));

【讨论】:

  • 感谢编辑,但错误仍然存​​在@virendra
  • 也改这个 $register =mysql_query("(INSERT INTO users (id, name, username, password, lastname,email) VALUES (?,?, ?, ?, ?, ?)" )或死(mysql_error());
【解决方案2】:

insert 语句中有 6 列,但 values 子句中只有 5 个值。那也应该是 6。

【讨论】:

    猜你喜欢
    • 2012-08-22
    • 2016-10-23
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多