ホームページ  >  に質問  >  本文

PHPクエリ更新データ

これは私が受け取ったエラーです:

UPDATE QUESTION SET situacao='Concluido' WHERE id=? SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。MariaDB サーバーのバージョンに対応するマニュアルを確認して、何が起こるかを確認してください。 「? 近くで使用する正しい構文」が 1 行目

にある場合

いろいろ試しましたが、最終的には次のコードしか使えませんでした。ありがとうございます

P粉938936304P粉938936304186日前406

全員に返信(1)返信します

  • P粉132730839

    P粉1327308392024-04-02 12:07:59

    答えはもうすぐ出ます。 Slava Rozhnev 氏が指摘したように、コードは SQL インジェクションの可能性があります。あなたの質問では、クエリでプレースホルダーを使用しています。ステートメントを準備するときは、PDO に次のように指示します。 ステートメントに何を入力しても、実行しないでください。それは単なるデータです 。準備ができたら、値をプレースホルダーにバインドできます。これは、bindValue または bindParam を介して、または execute()

    を使用して行うこともできます。 リーリー

    $stmt->bindValue(1, $id)現在の値を読み取り、プレースホルダーをその値に置き換えます。ループを使用する場合で、$id が変化し続ける場合は、$stmt-bindParam(1, $id) を使用できます。これにより、< code>$id が読み取られます。クエリを実行するときの変数。別のオプションは、bindValue 呼び出しを削除し、execute に値をバインドさせることです。これは、値の配列をパラメータとして execute 呼び出しに追加することで実行できます。あなたの場合、これは $stmt->execute([$id]) になります。個人的には、これを行うことを好みます。実行する前に、bindValue 呼び出しを大量に追加するよりもはるかにクリーンだからです。

    また、$sql 変数の割り当てを try-catch ブロックの外に移動したことにも注意してください。これは、PDO のコンストラクターが PDOException をスローした場合にキャッチで変数を使用するためです (行 $link = new PDO("mysql:host=$servername;dbname= $dbname", $username, $password);

    返事
    0
  • キャンセル返事