PDO / PHP - 检查是否存在排(PDO/PHP - Check if row exist)

2019-06-27 01:50发布

我想有柜面行的条件不存在的。

$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)但他们没有工作。

Answer 1:

你只可以直接检查返回值。

$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');


Answer 2:

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

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

从手册:

对于大多数数据库, PDOStatement::rowCount()不返回受一个行数SELECT语句。 相反,使用PDO::query()发出SELECT COUNT(*)使用相同的谓词为您预定语句SELECT语句,然后用PDOStatement::fetchColumn()来检索将返回的行数。 然后,您的应用程序能够执行正确的操作。

我建议对阅读了这里 。



Answer 3:

继承人我在我的对象类使用:

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;
    }
}


文章来源: PDO/PHP - Check if row exist
标签: php pdo row