0

このページで、foreach は高速ですが、データベースへのクエリは高速ではないことを学びました。だから私は単一の UPDATE クエリを実行しようとしていますが、うまくいきません:

$array = '';
foreach ($myar as $key => $value) {
  $array .= " (name='$value' WHERE lid='$key'), ";
}

$link1 = $db->prepare("UPDATE leyes SET $array");
$link1->execute();  

エラーが表示されます: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax

1 つの解決策:

  $array = '';

  foreach ($myarr as $key => $value) {
      $array .= " WHEN '$key' THEN '$value' ";
  }
  $array .= " ELSE name
  END";

  $link1 = $db->prepare("UPDATE table SET name = CASE id $array");
  $link1->execute();  
4

3 に答える 3

0

この行だけ追加

$array = '';
foreach ($myar as $key => $value) {
  $array .= " (name='$value' WHERE lid='$key'), ";
}

//Add this
$array = substr($array, 0, -2);

$link1 = $db->prepare("UPDATE leyes SET $array");
$link1->execute();
于 2013-03-30T11:06:15.003 に答える
0

この種の構文はこれまで見UPDATEたことがなかったので、そのようには機能しないのではないかという疑いを強めなければなりませんでした。私の理解では、UPDATE で複数の WHERE 句を使用することはできません。探していることを 1 つのステートメントで実行することはできません。

とはいえ、使用できる最適化戦略があります。ここから始めてください: http://www.kavoir.com/2009/05/mysql-update-multiple-rows-with-one-single-query.html

于 2013-03-30T11:58:19.853 に答える
0

のようにしてみてください

$array = '';
$i = 1;
foreach ($myar as $key => $value) {
    $array .= " name='$value' WHERE lid='$key'";
    if(count($myar) != $i++)
       $srray .= ',';
}
$link1 = $db->prepare("UPDATE leyes SET $array");
$link1->execute();  

最後の Where ステートメントの余分な「,」に問題があったと思います

于 2013-03-30T11:00:15.087 に答える