これは私が受け取ったエラーです:
UPDATE QUESTION SET situacao='Concluido' WHERE id=? SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。MariaDB サーバーのバージョンに対応するマニュアルを確認して、何が起こるかを確認してください。 「? 近くで使用する正しい構文」が 1 行目
いろいろ試しましたが、最終的には次のコードしか使えませんでした。ありがとうございます
答えはもうすぐ出ます。 Slava Rozhnev 氏が指摘したように、コードは SQL インジェクションの可能性があります。あなたの質問では、クエリでプレースホルダーを使用しています。ステートメントを準備するときは、PDO に次のように指示します。 ステートメントに何を入力しても、実行しないでください。それは単なるデータです 。準備ができたら、値をプレースホルダーにバインドできます。これは、bindValue または bindParam を介して、または execute()
ステートメントに何を入力しても、実行しないでください。それは単なるデータです
行 $stmt->bindValue(1, $id)現在の値を読み取り、プレースホルダーをその値に置き換えます。ループを使用する場合で、$id が変化し続ける場合は、$stmt-bindParam(1, $id) を使用できます。これにより、$id が読み取られます。クエリを実行するときの変数。別のオプションは、bindValue 呼び出しを削除し、execute に値をバインドさせることです。これは、値の配列をパラメータとして execute 呼び出しに追加することで実行できます。あなたの場合、これは $stmt->execute([$id]) になります。個人的には、これを行うことを好みます。実行する前に、bindValue 呼び出しを大量に追加するよりもはるかにクリーンだからです。
$stmt->bindValue(1, $id)
$id
$stmt-bindParam(1, $id)
bindValue
execute
$stmt->execute([$id])
また、$sql 変数の割り当てを try-catch ブロックの外に移動したことにも注意してください。これは、PDO のコンストラクターが PDOException をスローした場合にキャッチで変数を使用するためです (行 $link = new PDO("mysql:host=$servername;dbname= $dbname", $username, $password);
$sql
$link = new PDO("mysql:host=$servername;dbname= $dbname", $username, $password);
答えはもうすぐ出ます。 Slava Rozhnev 氏が指摘したように、コードは SQL インジェクションの可能性があります。あなたの質問では、クエリでプレースホルダーを使用しています。ステートメントを準備するときは、PDO に次のように指示します。
を使用して行うこともできます。 リーリーステートメントに何を入力しても、実行しないでください。それは単なるデータです
。準備ができたら、値をプレースホルダーにバインドできます。これは、bindValue または bindParam を介して、または execute()行
$stmt->bindValue(1, $id)
現在の値を読み取り、プレースホルダーをその値に置き換えます。ループを使用する場合で、$id
が変化し続ける場合は、$stmt-bindParam(1, $id)
を使用できます。これにより、$id が読み取られます。クエリを実行するときの変数。別のオプションは、bindValue
呼び出しを削除し、execute
に値をバインドさせることです。これは、値の配列をパラメータとしてexecute
呼び出しに追加することで実行できます。あなたの場合、これは$stmt->execute([$id])
になります。個人的には、これを行うことを好みます。実行する前に、bindValue 呼び出しを大量に追加するよりもはるかにクリーンだからです。また、
$sql
変数の割り当てを try-catch ブロックの外に移動したことにも注意してください。これは、PDO のコンストラクターが PDOException をスローした場合にキャッチで変数を使用するためです (行$link = new PDO("mysql:host=$servername;dbname= $dbname", $username, $password);