2010-05-13 67 views
1

所以这可能是一个愚蠢的初学者问题,但我一直在看它,无法弄清楚。有点背景:只是练习制作一个Web应用程序,第1页的表单从用户那里获取一些值,将它们发布到包含连接到数据库的代码并填充相关表格的下一页。无法弄清楚我的php/sql语句有什么问题

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

$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 1号线

提前感谢!

+1

也没有'utf9'编码相信... – 2010-05-13 05:05:33

回答

1

除非因为我在PHP做MySQL的它的改变,反引号(`),而不是单引号(')。

+0

如果我使用反引号,我会收到一个未知列...在'字段列表'错误 – Olegious 2010-05-13 04:50:02

+0

您能给出具体的错误吗? – JustABill 2010-05-13 04:52:21

+0

你知道吗,我再试一次,它在myphpadmin中有效。谢谢! – Olegious 2010-05-13 04:53:37

1

一个很好的逃避你的DB /列/表名一般的故障排除技巧就是通过另一个接口访问数据库,例如,phpMyAdmin,如果它在那里工作,你就有信心继续前进,或者你可能会发现如何修复你的SQL(phpMyAdmin很方便,因为它会将您的SQL转换为PHP的现成字符串。)

+0

好主意 - 这是我通过phpmyadmin获得的错误: 您的SQL语法错误; ('id','user_name','password','email','dob','sx')检查与您的MySQL服务器版本相对应的手册,以获得在''qa'附近使用的正确语法。 VALUES(NULL,'at line 1 基本上是一样的东西,对吧? – Olegious 2010-05-13 04:51:15

+0

嘿嘿......我想这本身并没有太大的帮助,但是重复尝试比通过HTTP做起来要容易得多! – Smandoli 2010-05-13 05:12:21

0

你需要用反引号(')来逃避列名,而不是(')

您还需要正确逃生要插入以及实际值(用单引号)

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); 

相关问题