33

PDO の exec ステートメントを使用する多くの方法を見つけましたが、それが役立つかどうかはわかりません。私の理解では、準備されたステートメントには execute() 関数を使用する必要があります。ユーザー入力からのデータで行を更新しているので、query() 呼び出しの代わりに準備済みステートメントを使用したいと思います。

私のコードは次のとおりです。

$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は準備文ではないのでしょうか?助言がありますか?

4

5 に答える 5

60

試してみてください$q->rowCount()。準備されたステートメントは、そのメソッドを介して影響を受ける行の数を返します。

于 2012-05-09T19:08:56.967 に答える
2

rowCount()準備されたステートメントからの PDOはUPDATEDELETEまたはINSERTステートメントの場合、影響を受ける行を返します。SELECTそれ以外の場合は、ステートメントから返された行数を返します。

于 2015-04-25T01:44:47.880 に答える
-3

PDO rowCount() は、単一の UPDATE クエリを使用する MySQL では役に立たないと思います。常に 0 を返すためです。

ex:
TABLE{id=1, col1="A"}
UPDATE  TABLE SET col1="AA" WHERE id=1;
rowCount will return 0;

also
UPDATE  TABLE SET col1="AA" WHERE id=999;
rowCount will return 0;

so rowCount() is useless in this case.

私はまだこのクエリでテストしていません UPDATE TABLE SET col1="AA"

于 2014-09-28T01:16:48.163 に答える