1


0

PHP PDO関連:更新SQLステートメントがデータベースのコンテンツを更新しない

PHPスクリプトで準備されたステートメントを使用して更新ステートメントを実装しようとしていますが、データベースのレコードを更新していないようで、よくわかりませんいくつかの洞察を共有できるなら、なぜそう感謝します。

Code

$query = "UPDATE DatTable SET DF_PARTY_ID = :party_id,
          DF_PARTY_CODE = :party_code,
          DF_CONNECTION_ID = :connection_id WHERE DF_PARTY_ID = ':party_id'";
$stmt = $this->connection->prepare($query);
$stmt->bindValue(':party_id', $data[0], PDO::PARAM_INT);
$stmt->bindValue(':party_code', $data[1], PDO::PARAM_INT);
$stmt->bindValue(':connection_id', $data[2], PDO::PARAM_INT);
$stmt->execute();

Inspiring solutionこのアプローチにつながります。 どうすればこの問題を解決できますか?

4 Answer


0


更新しようとしている「party_id」がデータベースに存在することを確認してください。

また、テーブルが「InnoDB」の場合は、更新が行われた後に「autocommit」がオンになっていることを確認するか、明示的なコミットを発行してください。


0


推測する代わりに、基本的なエラー処理を実装する必要があります。

$arr = $stmt->errorInfo();
print_r($arr);


0


役に立たないかもしれませんが、4つの変数があるのに、なぜ3つの変数しかバインドしないのですか? PHPでこれを行った経験があるとは言えませんが、PerlとOracleではエラーがスローされます。 2つのSETと1つのWHEREをバインドし、最初の割り当てを削除して、それが機能するかどうかを確認します。


0


あなたがやろうとしていることをやりたいかどうかはわかりません。

UPDATEステートメントでは、party_idがSET句とWHERE句に含まれているため、基本的にはNEW値に基づいてキーと2つの値を更新するように指示されます。

準備済みステートメントを次のように変更できます。

UPDATE DatTable SET DF_PARTY_ID =:party_id、DF_PARTY_CODE = :party_code, DF_CONNECTION_ID = :connection_id WHERE DF_PARTY_ID = ':old_party_id'

新しいparty_idの値を:party_idにバインドし、CURRENTの値を :old_party_id