Я хочу иметь условие, чтобы строка не существовала вообще.
$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)
но ни один из них не работает.
Вы можете просто проверить возвращаемое значение напрямую.
$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');
if($stmt->rowCount() == 0)
должен работать нормально, поскольку количество строк не может быть меньше нуля в любом случае вообще.
Из руководства:
Для большинства баз данных
PDOStatement::rowCount()
не возвращает количество строк, на которые влияетSELECT
. Вместо этого используйтеPDO::query()
для выдачиSELECT COUNT(*)
с теми же предикатами, что и вашPDOStatement::fetchColumn()
SELECT
, а затем используйтеPDOStatement::fetchColumn()
чтобы получить количество строк, которое будет возвращено. Затем ваше приложение может выполнить правильное действие.
Я бы предложил прочитать здесь .
Вот что я использую в своих объектных классах:
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; } }
-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; } }