33

行がまったく存在しないときに何らかのアクションを実行する条件が必要です。

$stmt = $conn->prepare('SELECT * FROM table WHERE ID=?');
$stmt->bindParam(1, $_GET['id'], PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);

試しif (count($row) == 0)ましif($stmt->rowCount() < 0)たが、どれも機能しません。

4

3 に答える 3

79

戻り値を直接確認できます。

$stmt = $conn->prepare('SELECT * FROM table WHERE ID=?');
$stmt->bindParam(1, $_GET['id'], PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);

if( ! $row)
{
    echo 'nothing found';
}

/*
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); // Same here
if( ! $rows)
{
    echo 'nothing found';
}
*/

フェッチせずにチェックすることについて質問している場合は、MySQLにを返すようにします1(またはCOUNT()コマンドを使用します)。

$sql = 'SELECT 1 from table WHERE id = ? LIMIT 1';
//$sql = 'SELECT COUNT(*) from table WHERE param = ?'; // for checking >1 records
$stmt = $conn->prepare($sql);
$stmt->bindParam(1, $_GET['id'], PDO::PARAM_INT);
$stmt->execute();

if($stmt->fetchColumn()) echo 'found';
于 2012-08-15T18:07:17.103 に答える
10
if($stmt->rowCount() == 0) 

行数はどのような場合でもゼロ未満にすることはできないため、正常に機能するはずです。

マニュアルから:

ほとんどのデータベースでは、ステートメントPDOStatement::rowCount()の影響を受ける行数を返しません。SELECT代わりに、を使用 して、目的のステートメント と同じ述部を持つステートメントPDO::query()を発行してから、を使用して、返される行数を取得します。その後、アプリケーションは正しいアクションを実行できます。SELECT COUNT(*)SELECTPDOStatement::fetchColumn()

ここでそれを読むことをお勧めします。

于 2012-08-15T18:12:16.193 に答える
0

オブジェクトクラスで使用するものは次のとおりです。

function exists_by_id () {
    // check if object exists by id
    $stm = DB::$pdo->prepare('select count(*) from `table` where `column`=:column');
    $stm->bindParam(':column', $this->column);
    $stm->execute();
    $res = $stm->fetchColumn();

    if ($res > 0) {
        return true;
    }
    else {
        return false;
    }
}
于 2017-01-05T16:39:25.077 に答える