1

phpフォームウィザードを使用して、フォームusubmisionのmysqlデータベースを更新しました。PHPフォームウィザードはINSERTINTOのみを実行するので、インターネットを検索して、on DUPLICATEKEYUPDATEコマンドを見つけました。ただし、クエリに対して正しい構文を取得できません。INSERTINTOは完全に機能することに注意してください。更新部分に取り組んでいるだけです。どんな助けでもありがたいです。クエリは以下のとおりです

@$pfw_strQuery = "INSERT INTO  `client`(`client_id`,`email`,`first_name`,`last_name`,`first_time`,`password`)VALUES (\"$client_id\",\"$email\",\"$first_name\",\"$last_name\",\"$first_time\",\"$textfield\") ON DUPLICATE KEY UPDATE `email` = VALUES(\"$email\"),`first_name` = VALUES(\"$first_name\"),`last_name` = VALUES(\"$last_name\"),`first_time` = VALUES (\"$first_time\"),`password` = VALUES (\"$textfield\") ";
4

1 に答える 1

1

でMySQL のドキュメントをON DUPLICATE KEY UPDATE確認してください。その句で PHP 変数を使用する場合はVALUES()、句の囲みを削除します。ON DUPLICATE KEY

$pfw_strQuery = "INSERT INTO  `client` (`client_id`,`email`,`first_name`,`last_name`,`first_time`,`password`)
  VALUES ('$client_id','$email','$first_name','$last_name','$first_time','$textfield')
  ON DUPLICATE KEY UPDATE
    `email` = '$email',
    `first_name` = '$first_name',
    `last_name` = '$last_name',
    `first_time` = '$first_time',
    `password` = '$textfield' ";

VALUES()エンクロージャーを使用する場合、内部に属するのは入力変数ではなく、列名です。

UPDATE 句で VALUES(col_name) 関数を使用して、INSERT ... UPDATE ステートメントの INSERT 部分から列の値を参照できます。

$pfw_strQuery = "INSERT INTO  `client` (`client_id`,`email`,`first_name`,`last_name`,`first_time`,`password`)
  VALUES ('$client_id','$email','$first_name','$last_name','$first_time','$textfield')
  ON DUPLICATE KEY UPDATE
    `email` = VALUES(`email`),
    `first_name` = VALUES(`first_name`),
    `last_name` = VALUES(`last_name`),
    `first_time` = VALUES(`first_time`),
    `password` = VALUES(`textfield`) ";

エスケープされた二重引用符をすべて一重引用符に置き換えたことに注意してください。MySQL は文字列リテラルの二重引用符をサポートしていますが、単一引用符はより標準的であり、他の RDBMS 間で移植可能です。

これらの変数はすべて、SQL インジェクションに対してすでに正しくエスケープされていると想定しています。最後に、おそらくご存じのとおり、古いmysql_*()関数は非推奨になる予定です。MySQLi や PDO など、準備されたステートメントとパラメーター化されたクエリをサポートする新しい API に切り替えて、エスケープと引用の問題を完全に回避することをお勧めします。

于 2012-10-15T13:39:59.260 に答える