0

我有 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

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

4

3 回答 3

2

只是建立在埃米尔提供的答案之上:

删除所有不需要的括号。

您的 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';
于 2012-04-09T14:02:48.663 回答
1

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

<?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";
}
?>

##我做了什么:

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

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

于 2012-04-09T14:26:41.180 回答
0

删除所有不需要的括号。

于 2012-04-09T13:50:47.080 回答