我有 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 循环中声明旧名称,因此结果为空,抛出了一个错误。
简而言之,我建议你读一本关于最佳实践和编程概念的好书。
删除所有不需要的括号。