PDO / PHP - 检查行是否存在

时间:2012-08-15 18:04:40

标签: php pdo row

我希望有一个条件,因为行根本不存在。

$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 个答案:

答案 0 :(得分:61)

您可以直接查看返回值。

$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)
{
    die('nothing found');
}

/*
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); // Same here
if( ! $rows)
{
    die('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()) die('found');

答案 1 :(得分:8)

if($stmt->rowCount() == 0) 

应该可以正常工作,因为在任何情况下行数都不能小于零。

从手册:

  

对于大多数数据库,PDOStatement::rowCount()不会返回   受SELECT语句影响的行数。相反,使用   PDO::query()发布SELECT COUNT(*)语句   将谓词作为预期的SELECT语句,然后使用   PDOStatement::fetchColumn()检索将要包含的行数   被退回然后,您的应用程序可以执行正确的操作。

我建议您阅读here

答案 2 :(得分: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;
    }
}

答案 3 :(得分:0)

 $query = 'SELECT *from carts where  pid = "'.$pid.'" AND email="'.$email.'"';
            
            // Prepare statement
            $stmt = $this->conn->prepare($query);
            $stmt->execute();
            $count = $stmt->rowCount();
            echo $count;