私はPDO用のexecステートメントを使用する多くの方法を見つけましたが、それが私を助けているかどうかはわかりません。私の理解は、準備された文のためにexecute()関数を使わなければならないということです。私は、ユーザー入力からのデータで行を更新しているので、query()呼び出しの代わりにprepared statementを使用したいと思います。次のようにPDOが実行ステートメントの実行中に影響を受ける行
私のコードは次のとおりです。
$dbh = buildDBConnector();
$sql = "UPDATE tb_users
SET authState=1
WHERE id = ? AND authPass = ?";
$q = $dbh->prepare($sql);
$f = $q->execute(array($id,$authPass));
if($f){
echo '<br />Success<br />';
}else{
echo '<br />Failure<br />';
}
問題は、クエリ自体にエラーがないと罰金を実行するので、$ Fの格納するために何の障害がないことです。しかし、実際に更新する行が見つかったかどうかを知り、それを正常に更新する必要があります。つまり、影響を受ける行が必要です。グーグルなどでは、それはexecステートメントに引き続き来ますが、私の理解から、execは準備されたステートメントのためではありませんか?助言がありますか?
警告:値が*すでに*設定されている場合(更新が2回実行された、おそらくダブルクリックされた送信ボタンから)、2回目はデータが正常であってもエラーが発生します。ユーザーエクスペリエンスのために、後にselectステートメントを実行してレコードが正しい値で存在するかどうかを確かめることができます。 'select authState from tb_users where id =? authPass =? 'となります。結果がないと、IDまたはパスワードが存在しないことを意味します。 (psでパスワードをハッシュしてください!) –