0

$arr古いメニュー名と$arr1新しいメニュー名の2つの配列があります。データベース内の古いメニュー名を新しいものに置き換えたい。次のコードがありますが、エラーが発生します。

<?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

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';
于 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 に答える