【问题标题】:MySQL Insert errorMySQL插入错误
【发布时间】:2011-03-30 05:55:05
【问题描述】:

好的,当尝试插入数据库时​​,我收到了这个错误

"您的 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)

【问题讨论】:

    标签: php mysql mysql-error-1064


    【解决方案1】:

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

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

    【讨论】:

    • 美丽。那成功了。在我的代码前面,我在每个变量上使用 mysql_real_escape_string() 。这不是正确的做法吗?
    • 好的。非常感谢您的帮助。我对整个编程都是新手。我将阅读更多关于 SQL 注入的内容,这样我就不会再犯这个错误并保证我的网站安全!感谢大家的快速回复。
    【解决方案2】:

    这可能对你有帮助..

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

    【讨论】:

      【解决方案3】:

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

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

      顺便说一句,您的插入中有一个额外的列 - NOW 似乎与列无关。 顺便说一下,我假设 ZIP 是一个 varchar 列,而不是一个数字。

      【讨论】:

      • 这是 $insert_query INSERT INTO 联系人(名字、姓氏、电子邮件、州、邮编、日期、ip)的回声(你、我、a@a.com、AL、12345、现在(), 69.169.186.192)
      • 是的,你需要按照 Mat 的建议去做。将编辑我的答案以反映。
      • 是的,它是一个 varchar,你是对的。这解决了我遇到的错误。感谢您的回答。
      猜你喜欢
      • 1970-01-01
      • 2013-03-01
      • 2011-08-12
      • 2013-06-17
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多