6

すべての MySQL 接続を古い mysql_query から PDO に切り替えようとしています。異なる配列を使用して MySQL テーブルの複数の行と列を更新しようとすると、次のエラーが表示されます。

[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。'(accnt, car, radio, misc) value ('admin', '300.00', '400.00', '10.00') WHERE ID' at line を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 1

次のコードから:

$account = $_POST['account'];
$car_lease = $_POST['car_lease'];
$radio_lease = $_POST['radio_lease'];
$misc_lease = $_POST['misc_lease'];
$lease_ID = $_POST['lease_ID'];

//$data = array_map(null,$account,$car_lease,$radio_lease,$misc_lease);
$A = count($lease_ID);

try {
    $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
    $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $STH = $DBH->prepare('UPDATE lease (accnt, car, radio, misc) values (:account, :car_lease, :radio_lease, :misc_lease) WHERE ID = :lease_ID');
    $i = 0;
    while($i < $A) {
        $STH->bindParam(':account', $account[$i]);
        $STH->bindParam(':car_lease', $car_lease[$i]);
        $STH->bindParam(':radio_lease', $radio_lease[$i]);
        $STH->bindParam(':misc_lease', $misc_lease[$i]);
        $STH->bindParam(':lease_ID', $lease_ID[$i]);
        $STH->execute();
        $i++;
    }
}
catch(PDOException $e) {  
    echo "I'm sorry, but there was an error updating the database.";  
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}

この問題は、ステートメント ハンドルの呼び出し方法に起因していると思いますが、構文のどの部分が間違っているのかわかりません。また、これはそのような状況を処理するための最良の方法ですか? または、テーブル内の複数の行を更新するより良い方法はありますか?

4

4 に答える 4

17

INSERTUPDATEステートメントの間の構文を混同しています。リストの代わりに、句VALUES()が必要です。SET

$STH = $DBH->prepare('
    UPDATE lease 
    SET 
      accnt = :account, 
      car = :car_lease, 
      radio = :radio_lease, 
      misc = :misc_lease 
    WHERE ID = :lease_ID
');

ステートメントで使用する完全な仕様については、MySQLUPDATE構文リファレンスを確認してください。UPDATE

于 2012-08-20T19:49:00.943 に答える
0

より良い方法はCASEです。準備された stmt よりも 3 ~ 4 倍高速です。

于 2015-07-02T15:22:36.510 に答える
0

複数のフィールドを更新する簡単な方法ですが、編集ページの入力がデータベース テーブルと同じ順序であることが非常に重要です。

その助けを願っています

if (isset($_POST['pageSubmit'])) {
echo '<pre>';
print_r($_POST['page']);
echo '</pre>';


 $fields = array('id','name','title','content','metaKey','metaDescr','metaTitle');//fields array

$fields = array_map(function($field){
return "`$field`";
},$fields);

$queryArray = array_combine($fields,$_POST['page']);//createng array for query

$countFields = count($queryArray);//getting count fields

$id = array_splice($queryArray , 0,-($countFields-1));//getting id of page

$insertArray = $queryArray;//getting new fields array without first key and value

function updatePage($db, array $fields, array $id){

    $where = array_shift($id);  
    $sql = array();
foreach ($fields as $key => $value) {

   $sql[] = "\n".$key."" ." = "."'".$value."'";
}
$sql = implode(",",$sql);

   try {

       $query = $db->prepare("UPDATE `pages` SET $sql WHERE `id` = $where ");           

       $query->execute();

   } catch (Exception $e) {

    echo $e->getMessage();

   }

 }

   updatePage($db, $insertArray, $id);


}
于 2013-11-30T16:53:16.680 に答える