2011-03-30 79 views
2

好吧,试图插入数据库时​​,我收到此错误MySQL的插入错误

“你在你的SQL语法错误; 检查对应于 你的MySQL服务器版本的手册在 正确的语法使用近 '@ email.com, UT,84505,NOW(),69.169.186.192)' 在 1" 号线

我想不通的问题。这是我的插入语句的代码。

$insert_query = sprintf("INSERT INTO contacts (first_name, last_name, email, state, zip, date, ip) VALUES (%s, %s, %s, %s, %s, NOW(), %s)", 
         $fname, 
         $lname, 
         $email, 
         $state, 
         $zip, 
         $ip); 


$result = mysql_query($insert_query, $connection) or die(mysql_error()); 

我的表结构如下:

id int(11)        
    first_name varchar(100)         
    last_name varchar(100)        
    email varchar(100)         
    state varchar(3)        
    zip int(10)        
    date datetime         
    ip varchar(255) 

回答

2

您需要引用在INSERT语句中的所有字符串类型的列。以sprintf格式替换%s'%s'

如果您还没有这样做,请阅读有关SQL注入的内容。

+0

美丽。那就是诀窍。在我的代码中,我在每个变量上都使用了mysql_real_escape_string()。这不是正确的做法吗? – Mitchell 2011-03-30 06:03:29

+0

你需要做到这两点。 – Mat 2011-03-30 06:04:08

+1

好的。非常感谢您的帮助。我是新编程的东西。我将更多地阅读SQL注入,所以我不会再犯这个错误,并保持我的网站安全!我很欣赏每个人的快速反应。 – Mitchell 2011-03-30 06:07:13

0

如果你可以回显$ insert_query,它会有所帮助,但是看起来你并没有在varchars的参数周围加引号。

​​

顺便说一句,你有一个额外的列在你的插入 - 现在没有出现相关的列。 我假设ZIP是一个varchar列,顺便说一下,不是一个数字。

+0

这是$ insert_query的回声 INSERT INTO联系人(名字,姓氏,电子邮件,州,邮编,日期,IP)值(你,我,[email protected],AL,12345,NOW(),69.169。 186.192) – Mitchell 2011-03-30 06:01:24

+0

是的,你需要做Mat建议的事情。将编辑我的答案来反映。 – 2011-03-30 06:04:15

+0

是的,它是一个varchar,你是对的。这就解决了我得到的错误。感谢你的回答。 – Mitchell 2011-03-30 06:10:40

0

这可能会帮助你..

$insert_query = "INSERT INTO contacts set first_name = '$fname', last_name = '$lname', email = '$email', state = '$state', zip = '$zip', date = ". time() .", ip = '$ip')"; 


$result = mysql_query($insert_query, $connection) or die(mysql_error()); 

,如果你想查询的查询

echo $insert_query;