Intereting Posts
Подготовленные заявления MySQL fgetcsv не является правилом данных разбиения скрывать других получателей при отправке нескольких писем При использовании PHP CLI – APC вылетает apache – apc_fcntl_lock не удалось выполнить errno: 6 Komodo Редактировать функцию и потребовать автозаполнение Солить с хешированной версией пароля пользователя так же безопасно, как солить с заранее определенной строкой? Получены ли результаты запроса laravel? Когда действие формы действует на ту же страницу, сохраните позицию страницы? Кодирование / декодирование URL-адресов PHP Неустранимая ошибка: Class 'Stripe' не найден в C: \ wamp \ www \ Уязвимость $ _SERVER не работает? Наличие опции настраиваемых классов, но унифицированное имя класса Строка обрезки Php для определенного символа Как удалить символ \ ufeff в моих сценариях веб-страницы? не-латинская проверка адреса электронной почты

$ stmt-> execute (): как узнать, была ли вставка db успешной?

С помощью следующего фрагмента кода, как я знаю, что что-то было добавлено в db?

if ($stmt = $connection->prepare("insert into table (blah) values (?)")) { $stmt->bind_param("s", $blah); $stmt->execute(); $stmt->close(); } 

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

 if($stmt->affected_rows==-1){$updateAdded="N"; echo "failed";} 

А затем используйте $ updatedAdded = "N", чтобы затем пропустить другие фрагменты кода дальше страницы, которые зависят от того, что указанная выше вставка прошла успешно.

Есть идеи?

Метод execute() возвращает boolean … поэтому просто выполните следующее:

 if ($stmt->execute()) { // it worked } else { // it didn't } 

Проверьте возвращаемое значение $ stmt-> execute ()

 if(!$stmt->execute()) echo $stmt->error; 

Обратите внимание, что строка кода выполняет команду execute (), поэтому используйте ее вместо текущего $ stmt-> execute () не после нее.

Просто проверьте страницы руководства любой функции, которую вы используете:

prepare () – возвращает объект оператора или FALSE, если произошла ошибка.
bind_param () – возвращает TRUE при успешном завершении или FALSE при сбое.
execute () – возвращает TRUE при успешном завершении или FALSE при сбое.
close () – возвращает TRUE при успешном завершении или FALSE при сбое.

если вы имеете в виду, что хотите узнать количество затронутых строк, вы можете использовать rowCount в инструкции pdo

 $stmt->rowCount(); 

после выполнения;

если вы говорите об обработке ошибок, я думаю, что лучший вариант – установить errmode для разбрасывания исключений и обернуть все в блок try / catch

 try { //---- } catch(PDOException $e) { echo $e->getMessage(); } 

Другой путь:

 if ($stmt->error){ echo "Error"; } else{ echo "Ok"; }