Хорошо, таким образом, я использовал обертку 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' (была ли строка удалена или нет.)
Любая справка значительно ценилась бы.
Править: На основе этого ТАК вопрос, я делаю все правильно... Я не понимаю, почему это не работает.
Это работает не так, как вы ожидаете, потому что используемая вами «оболочка» никогда не использует 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 ()
.
$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;