无法弄清楚我的php / sql语句有什么问题

时间:2010-05-13 04:39:32

标签: php sql

所以这可能是一个愚蠢的初学者问题,但我一直在看它并且无法弄明白。一点背景:只是练习创建一个Web应用程序,第1页上的表单从用户那里获取一些值,将它们发布到下一页,其中包含连接到DB的代码并填充相关表。

我成功建立了数据库连接,这是包含查询的代码:

$conn->query("SET NAMES 'utf9'");         

$query_str = "INSERT INTO 'qa'.'users' ('id', 'user_name','password' ,'email' ,'dob' ,'sx') VALUES (NULL, $username, $password, $email, $dob, $sx);";

$result = @$conn->query($query_str);

这是返回的错误:插入查询失败:您的SQL语法中有错误;查看与您的MySQL服务器版本相对应的手册,以便在''qa'附近使用正确的语法。'users'('id','user_name','password','email','dob','s'at at第1行

提前致谢!

4 个答案:

答案 0 :(得分:1)

除非我在PHP中使用MySQL进行更改,否则使用反引号(`)转义db / column / table名称,而不是撇号(')。

答案 1 :(得分:1)

良好的一般故障排除技术是通过数据库的另一个接口使查询工作。例如,phpMyAdmin。如果它在那里工作,你会有信心继续前进。或者你可能会发现如何修复你的SQL。 (phpMyAdmin非常方便,因为它会将您的SQL转换为PHP的现成字符串。)

答案 2 :(得分:0)

您需要使用反引号(`)而不是(')

来转义列名

您还需要正确地转义您插入的实际值(使用单引号)

答案 3 :(得分:0)

OMG不是一个正确答案

$query_str = "
INSERT INTO `qa`.`users` (`id`, `user_name`,`password` ,`email` ,`dob` ,`sx`) 
VALUES (NULL, '$username', '$password', '$email', '$dob', '$sx')";

使用反引号引用的标识符,字符串引用了撇号!

我希望你在把它放入查询之前通过mysql_real_escape字符串传递所有变量,即:

$username = mysql_real_escape string($username);

等等