PDOException SQLSTATE [42000]:语法错误或访问冲突:1064

时间:2016-03-18 19:10:32

标签: php mysql pdo

我正在尝试使用php通过注册表单填写条目。但我收到了以下错误:

异常'PDOException',消息'SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在“第1行”附近使用正确的语法

这是我的代码:

Fedora vm

我已检查过我的代码,但找不到任何错误..有什么建议可以解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

按要求。

表名#中的#_customerdata符号应使用勾号进行转义。

insert into `#_customerdata`

阅读标识符限定符:http://dev.mysql.com/doc/refman/5.7/en/identifier-qualifiers.html

假设确实是表的名称,并且#符号不代表数值。

要么是重命名,要么重命名它,而不包含MySQL会抱怨的任何字符。

如果它仍然抱怨它,那么你别无选择,只能将其重命名为customerdata

同样如spencer7593的评论中所述:

OP正在使用PDO而不是已弃用的mysql_函数,OP正在使用带有绑定占位符的预准备语句。就个人而言,我在此上下文中使用bindValue而不是bindParamWhat is the difference between bindParam and bindValue?

并删除其中一个冒号mysql::host

查阅与PDO连接的手册:

手册中的示例:

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>

脚注:

您应在每个标头后添加exit;,否则您的代码可能希望继续执行。

if($stmt->execute()){
    header('location: ../customersignup.php?status=success');
    exit;
}
else{
    header('location: ../customersignup.php?status=failed');
    exit;
}

参考:

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

答案 1 :(得分:0)

如果还没有工作,请尝试解决此问题:

$conn = new PDO("mysql::host='localhost';dbname=majorproject;",'root','');

在'mysql'和'host'之间你有'::',但它应该是':'