PDO / PHP – проверьте, существует ли строка

Я хочу иметь условие, чтобы строка не существовала вообще.

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