-1

次のようなコードを実行しています:

// first select
$query = $link->prepare("
            SELECT id FROM table
            WHERE name = ?;"); 

$param = 'foo';

$query->bindParam(1, $param); // should return 1 row
$query->execute();
echo $query->rowCount(); // displays 0 (??????)

その他の例:

// second select
$query = $link->prepare("
            SELECT id FROM table
            WHERE name = ?;"); // should return 0 rows

$param = 'bar';

$query->bindParam(1, $param);
$query->execute();
echo $query->rowCount(); // displays 1 (?????)

私のテーブル:

id | name
---------
1  | foo

理解できない。

4

2 に答える 2

1

一部のデータベースは、SELECTステートメントによって返される行数を返す場合があります。ただし、この動作はすべてのデータベースで保証されているわけではなく、に依存するべきではありません。手動COUNT(*)次のクエリのように、fetchColumn()をエミュレートするために使用できますrowCount()

$query = $link->prepare("SELECT COUNT(*) FROM table  WHERE name = ?");
$param = 'bar';
$query->bindParam(1,$param);
$query->execute();
// Check the number of rows that match the SELECT statement 
if($query->fetchColumn() == 0) {
    echo "No records found";
 }else{
        $query = $link->prepare("SELECT id FROM table WHERE name = ?")
        //Etc
}
于 2013-02-21T19:20:08.670 に答える
1

bindParamメソッドが間違っています。変数または変数の名前が必要です。代わりに使用したいのですが、使用しbindValueたようにリテラル値が必要です。

マニュアル参照:

于 2013-02-21T13:30:40.067 に答える