我正在尝试使用php通过注册表单填写条目。但我收到了以下错误:
异常'PDOException',消息'SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在“第1行”附近使用正确的语法
这是我的代码:
Fedora vm
我已检查过我的代码,但找不到任何错误..有什么建议可以解决这个问题吗?
答案 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
而不是bindParam
。 What 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'之间你有'::',但它应该是':'