1

展開された配列から取得した値でデータベースのレコードを更新しようとしています

    $arr2 = explode(",",$_POST['hidden-tags']); 
   //echo $arr2[0];

   //insert new rows into blog post
    mysql_select_db($db, $db);
 $insertq = mysql_query("UPDATE blog SET tags1 = $arr2[0],tags2 = $arr2[1],tags3 = $arr2[2], tags4 = $arr2[3], tags5 = $arr2[4]  WHERE idblog = '$id' ",$dbconnet);

配列から値を一度に1つずつエコーすると、うまく機能します。それらをデータベースに入れようとすると、行が空になります。さらに、ユーザーは5つの項目を入力しなかった可能性があり、1つしか入力しなかった可能性がありますが、それが実際の問題だとは思いません。正直なところ、なぜ現在失敗しているのかまったくわかりません。

すべての値を1つのフィールドに保存できることはわかっていますが、後でプルバックしてクエリを実行するときに、別々のフィールドとして保存する方が簡単です。

4

4 に答える 4

1
$insertq = mysql_query("UPDATE blog SET tags1 = $arr2[0],tags2 = $arr2[1],tags3 = $arr2[2], tags4 = $arr2[3], tags5 = $arr2[4]  WHERE idblog = '$id' ",$dbconnet);

する必要があります:

$insertq = mysql_query("UPDATE blog SET tags1 = '".$arr2[0]."',tags2 = '".$arr2[1]."',tags3 = '".$arr2[2]."', tags4 = '".$arr2[3]."', tags5 = '".$arr2[4]."'  WHERE idblog = '".$id."' ,$dbconnet);

または、クエリ全体で変数名が文字列の一部と見なされます

編集済み:引用符を逆にしました。

于 2013-02-06T11:16:11.647 に答える
1

これは次のようになります:

$insertq = mysql_query("UPDATE blog SET tags1 = "'.$arr2[0].'",tags2 = "'.$arr2[1].'",tags3 = "'.$arr2[2].'", tags4 = "'.$arr2[3].'", tags5 = "'.$arr2[4].'"  WHERE idblog = "'.$id.'" ",$dbconnet);
于 2013-02-06T11:18:57.337 に答える
1

テーブルのデータ型を調べる必要があるかもしれません。データ型としてvarcharまたはtextを使用している場合は、単一のコロンが必要になります。

$insertq = mysql_query("UPDATE blog SET tags1 =' $arr2[0]',tags2 = '$arr2[1]',tags3 = '$arr2[2]', tags4 = '$arr2[3]', tags5 = '$arr2[4]'  WHERE idblog = '$id' ",$dbconnet);

また、idblogが整数の場合は、一重引用符を使用しないでください。

お役に立てれば

于 2013-02-06T11:19:49.633 に答える
1

列のデータ型が文字列の場合、値は文字列リテラルであるため、一重引用符で囲む必要があります。例えば、

$insertq = mysql_query("UPDATE blog SET tags1 = '". $arr2[0] . "',....");

SQL Injection補足として、変数の値(s)が外部からのものである場合、クエリは脆弱です。それを防ぐ方法については、以下の記事をご覧ください。を使用PreparedStatementsすると、値を一重引用符で囲む必要がなくなります。

于 2013-02-06T11:17:45.483 に答える