Создание нового пользователя в MySQL как:
$query = $dbconnection->prepare("CREATE USER 'john'@'localhost' IDENTIFIED BY 'mypass'");
$query->execute();
$counts = $query->rowCount();
return $counts;
Обычно в других запросах я использую rowCount (), чтобы проверить, был ли запрос успешным или нет. если rowCount ()> 1, запрос выполнен успешно. Но я понял, что это не работает при создании пользователя.
В этом случае пользователь создается, но rowCount () по-прежнему возвращает значение 0. Есть ли способ проверить, успешно ли выполнен этот запрос.
ОБНОВЛЕНИЕ в комментарии @GHOST:
Этот запрос возвращает значение 1, чтобы подтвердить, что данные вставлены или строка затронута.
$query = $this->link->prepare("INSERT INTO agent(uname,password,) VALUES(?,?");
$values = array($uname,$pw);
$query->execute($values);
$counts=$query->rowCount();
return $counts;
Я ищу какой-то способ, чтобы проверить таким же образом для предыдущего случая.
Спасибо за дополнительный код
$query->execute();
Это вернет True при успешном запросе и False, если при выполнении запроса произошла ошибка
if !($query->execute() {
echo "Ouch, there was an error.";
}
Ответ Колина правильный для стандартного режима ошибок PDO.
Это скорее длинный комментарий, чем ответ, но важно отметить разницу возвращаемых значений для rowCount()
а также execute()
особенно для обновлений и удалений.
Когда вы обновляете и удаляете, вы можете иметь rowCount()
из 0
но execute()
из true
, Это означает, что запрос выполнен успешно, но ни одна строка не соответствует предоставленным ограничениям (обычно WHERE
).
Поэтому при выполнении обновлений и удалений вы должны проверять оба возвращаемых значения. Один, чтобы убедиться, что запрос выполнен успешно, и один, чтобы проверить, были ли затронуты строки. Проверка того и другого облегчит отладку и предотвратит фатальную ошибку rowCount()
если запрос не удался.