【问题标题】:MySQL UPDATE Query Syntax Error?MySQL UPDATE 查询语法错误?
【发布时间】:2012-02-21 17:05:59
【问题描述】:

我对 MySQL 和 PHP 比较陌生,我已经尝试 UPDATE 一个表很长时间了,我已经搜索了 Google 和 SO,但我仍然无法弄清楚。

这里是php:

$info = array('about_me' => NULL, 'profile_pic' => NULL, 'political_party' => NULL,         'econ_views' => NULL, 'religious_views' => NULL, 
'abortion_view' =>NULL,'gay_marraige' => NULL, 'other' => NULL);

foreach ($_POST as $key => $value) {
    $info[$key] = mysql_escape_string($value);
}

$about_me = $info['about_me'];
$profile_pic = $info['profile_pic'];
$econ_views = $info['econ_views'];
$religious_views = $info['religious_views'];
$abortion_view = $info['abortion_view'];
$gay_marraige = $info['gay_marraige'];
$other = $info['other'];
$political_party = $info['political_party'];

//Connect to database
require 'db.php';

$query = "UPDATE `users` SET `about_me`=$about_me, `profile_pic`=$profile_pic,   `econ_views`=$econ_views,
       `religious_views`=$religious_views,`abortion_view`=$abortion_view,`gay_marriage`=$gay_marraige, 
    `other`=$other, `political_party`=$political_party WHERE `username`=emoore24";

echo "$query"."<br /><br />";
$result = mysql_query($query) or die(mysql_error());

echo "success"

这是在具有许多文本区域和一个选择元素的表单上运行的。我用简单的字符串作为数据运行所有内容并得到了这个:

UPDATE users SET about_me=test about, profile_pic=, econ_views=test econ, religious_views=test rel,abortion_view=test abortion,gay_marriage=test gay marraige, @ 987654329@=test other, political_party=democrat WHERE username=emoore24

您的 SQL 语法有错误;检查与您的 MySQL >server 版本相对应的手册,以在第 1 行的“econ_views=test econ,>religious_views=test rel,abortion_view=test abor”附近使用正确的语法

我假设它很小,但我看不到它。有人可以帮忙吗?

【问题讨论】:

    标签: php mysql syntax mysql-error-1064 sql-update


    【解决方案1】:

    您没有在任何字符串文字周围加上引号。

    UPDATE `users` SET 
      `about_me`=about_me, 
      `profile_pic`=, 
      `econ_views`=test econ,  
      `religious_views`=test rel,
      `abortion_view`=test abortion,
      `gay_marriage`=test gay marraige, 
      `other`=test other, 
      `political_party`=democrat 
    WHERE `username`=emoore24
    

    应该是:

    UPDATE `users` SET 
      `about_me`='about_me', 
      `profile_pic`=NULL, 
      `econ_views`='test econ',  
      `religious_views`='test rel',
      `abortion_view`='test abortion',
      `gay_marriage`='test gay marraige', 
      `other`='test other', 
      `political_party`='democrat' 
    WHERE `username`='emoore24'
    

    如果您将 PDO 与准备好的语句一起使用,它会更简单、更安全,并且您不必担心引用或转义文字。例如,下面是我编写该代码的方式:

    $info = array(
      'about_me' => NULL, 
      'profile_pic' => NULL, 
      'political_party' => NULL,
      'econ_views' => NULL, 
      'religious_views' => NULL, 
      'abortion_view' => NULL,
      'gay_marriage' => NULL, 
      'other' => NULL
    );
    
    $query = "UPDATE `users` SET 
          `about_me`=:about_me, 
          `profile_pic`=:profile_pic, 
          `econ_views`=:econ_views,  
          `religious_views`=:religious_views,
          `abortion_view`=:abortion_view,
          `gay_marriage`=:gay_marriage, 
          `other`=:other, 
          `political_party`=:political_party 
        WHERE `username`=:username";
    
    if (($stmt = $pdo->prepare($query)) == FALSE) {
      $err = $pdo->errorInfo(); die($err[2]);
    }
    
    $values = array_intersect_key($_POST, $info);
    $values['username'] = 'emoore24';
    
    if ($stmt->execute( $values ) == FALSE) {
      $err = $stmt->errorInfo(); die($err[2]);
    }
    

    【讨论】:

    • 对不起这里的菜鸟问题,但你是说我需要在 $query 字符串中的所有变量周围加上引号?如果是这样,它们应该是双引号吗?感谢您的快速响应
    • 啊,nvm 我明白了...非常感谢!
    • @emoore:在 SQL 中对字符串文字使用单引号。请参阅我对Do different databases use different name quote的回复
    • @emoore:您还应该修复 $info 数组中拼写错误的“gay_marraige”。
    【解决方案2】:

    您需要在查询中引用文本

    UPDATE `users` SET `about_me`='about_me'
    

    并对其他字段执行相同操作。

    【讨论】:

      【解决方案3】:

      profile_pic=,看起来也有问题。我在 mysql IDE 或 mysql 命令行编辑器中手动运行查询以查看问题所在。

      我还从一个小的选择语句开始并构建它。在我有一个可以工作的 select 语句后,我将它切换到一个 update 语句。

      【讨论】:

        【解决方案4】:

        您的查询是错误的。您需要在所有值周围加上引号:

        像这样更改您的查询:

        $query = "UPDATE `users` SET `about_me`='about_me', `profile_pic`='$profile_pic',   `econ_views`='$econ_views',`religious_views`='$religious_views',`abortion_view`='$abortion_view',`gay_marriage`='$gay_marraige', `other`='$other', `political_party`='$political_party' WHERE `username`='emoore24'";
        

        希望这可行:)

        【讨论】:

          猜你喜欢
          • 2015-09-01
          • 2011-08-18
          • 1970-01-01
          • 1970-01-01
          • 2016-08-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-06
          相关资源
          最近更新 更多