Как я могу получить количество строк, удаленных с PDO?

Хорошо, таким образом, я использовал обертку PDO для проекта, я продолжаю работать, и я пытаюсь узнать, был ли Запрос на удаление успешен или нет. Вот код, который я использую:

/**
* A pretty straight-forward query to delete a row from the verification
* table where user_id is $user_id and code is $code
*/
$result = $this->database->query("DELETE FROM verification " .
                                 "WHERE user_id = %u AND code = %s",
                                 $user_id,
                                 $code);

/**
 * This function will grab the PDO's exec() return, which should
 * return the number of rows modified.
 */
if($this->database->getNumAffected($result) > 0)
    return true;
else
    return false;

Проблема, удаляет ли Запрос на удаление на самом деле строку или нет, $this->, база данных-> getNumAffected ($result) всегда возвращается '0'.

Можно проверить обертку, но в основном $this-> база данных-> getNumAffected ($result) просто возвращает точно то же значение PDO:: должностное лицо () возвратилось бы.

Я попробовал этот код без обертки (непосредственно в PDO), и у меня была та же проблема, но реверс: это всегда возвращалось '1' (была ли строка удалена или нет.)

Любая справка значительно ценилась бы.

Править: На основе этого ТАК вопрос, я делаю все правильно... Я не понимаю, почему это не работает.

8
задан Community 23 May 2017 в 10:27
поделиться

2 ответа

Это работает не так, как вы ожидаете, потому что используемая вами «оболочка» никогда не использует PDO :: exec () - она ​​обертывает все в заявление PDO. Согласно быстрому чтению исходного кода для версии 2.2.6 класса 'database' из предоставленного вами URL-адреса, метод 'query' должен возвращать массив, содержащий дескриптор оператора:

502 $statement = $this -> getDatabaseConnection () -> prepare ( $query );
...
587 $ret = array ( $statement, func_get_args (), $lastIndex );
588     
589 return ( $ret );

Итак, предполагая, что ваш $ this-> database-> query () вызывает метод query этого класса базы данных, вы должны иметь возможность выполнить $ result [0] -> rowCount () .

Обратите внимание, что ваше утверждение на предыдущий ответ о том, что «используемая [вами] оболочка использует другую версию rowCount () из-за ошибки, которая существует с функцией rowCount ()», не соответствует действительности - оболочка реализует numRows, но это не то же самое, что PDOStatement :: rowCount () , который остается неизменным внутри дескриптора оператора, возвращенного из database :: query () .

2
ответ дан 5 December 2019 в 17:38
поделиться
$query = $this->database->prepare("DELETE FROM verification WHERE user_id = :user_id AND code = :code", array('user_id' => $user_id, 'code' => $code));
$query->execute();

if ($query->rowCount() > 0) {
  return TRUE;
}
return FALSE;
8
ответ дан 5 December 2019 в 17:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: