错误 MySQL 服务器版本,用于在“(菜单名称)=(”“)附近使用正确的语法,其中菜单名称=(”食物菜单“)”


error MySQL server version for the right syntax to use near '(menuname) =('') where menuname=('Food Menu')'

我有 2 个数组,$arr 个用于旧菜单名称,$arr1 个用于新菜单名称。我想将旧菜单名称替换为数据库中的新菜单名称。我有以下代码,但它抛出了一个错误。

<?php
$arr  = explode(',', preg_replace('/^.*'[(.*)'].*$/', '$1', trim($_POST['menuname'],
                                                                 '[]')));
$arr1 = explode(',', preg_replace('/^.*'
       [(.*)'].*$/', '$1', trim($_POST['editmainmenu'], '[]')));
mysql_connect("localhost", "root", "root");
mysql_select_db("test");
foreach ($arr as $key => $value)
{
    $value1 = $arr1[$key];
    mysql_query("update test set (menuname) =('" .
                    mysql_real_escape_string($value1) . "') where menuname=('" .
                    mysql_real_escape_string($value) . "')")or
        die('unable' . mysql_error());
    echo "updated";
}
?>

我收到以下错误:

04-09 19:06:27.201: I/System.out(1291): unableYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(menuname) =('') where menuname=('Food Menu')' at line 1

请告诉我如何解决这个问题。谢谢!

只是为了建立在Emil提供的答案之上:

删除所有不需要的括号。

SQL 语句中有不正确和不必要的括号。您的陈述如下所示:

update test set (menuname) = ('foo') where menuname = ('foo2');

当它应该看起来像这样(减去不正确的括号):

update test set menuname = 'foo' where menuname = 'foo2';

此外,如果您用大写字母表示 SQL 语句,阅读起来会容易得多:

UPDATE test SET menuname = 'foo' WHERE menuname = 'foo2';

这是我对代码进行清理后的样子:

<?php
$old_menu_names = explode(',',
                          preg_replace(
                              "|'[(.+)']|",          //Find the part in between the square brackets
                              "$1",                  //And extract it
                              trim(
                                  $_POST['menuname'] //From the trimmed menuname.
                              )
                          )
);
$new_menu_names = explode(',',
                          preg_replace(
                              "|'[(.+)']|",
                              "$1",
                              trim(
                                  $_POST['editmainmenu']
                              )
                          )
);
mysql_connect("localhost", "root", "root");
mysql_select_db("test");
foreach ($old_menu_names as $key => $old_name)
{
    $new_name = mysql_real_escape_string($new_menu_names[$key]);
    $old_name  = mysql_real_escape_string($old_menu_names[$key]);
    mysql_query("UPDATE `test` SET `menuname` = '$new_name' WHERE menuname = '$old_name'")
        or die('Error' . mysql_error());
    echo "Updated";
}
?>

##What 我做到了:

  • 变量命名 - 根据变量包含的内容命名变量,不要使用晦涩的名称,例如$arr$arr1,在较大的应用程序中,您将立即迷失方向。
  • 如果语句很长、很复杂和/或包含嵌套括号,请不要害怕将其换行,以便更容易理解。
  • 注释,
  • 当某些内容没有立即理解时,请随时添加注释,向任何人(包括几个月后的您自己)解释代码的目的是什么。
  • 不要在不需要的地方添加括号。请参阅我编写的新查询。
  • 您没有在 foreach 循环中声明旧名称,因此结果为空,抛出了一个错误。

简而言之,我建议你读一本关于最佳实践和编程概念的好书。

删除所有不需要的括号。