Подтвердить что ты не робот

$ 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", чтобы затем пропустить другие фрагменты кода дальше страницы, которые зависят от того, что указанная выше вставка прошла успешно.

Любые идеи?

4b9b3361

Ответ 1

Метод execute() возвращает boolean... так просто:

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

Ответ 2

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

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

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

Ответ 3

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

prepare() - возвращает объект оператора или FALSE если произошла ошибка.
bind_param() - возвращает TRUE в случае успеха или FALSE в случае неудачи.
execute() - возвращает TRUE в случае успеха или FALSE в случае ошибки.
close() - возвращает TRUE в случае успеха или FALSE в случае ошибки.

На практике, однако, это становится раздражающим и подверженным ошибкам. Лучше настроить mysqli для выдачи исключений при ошибке и избавления от всей конкретной обработки ошибок, за исключением тех немногих случаев, когда ожидается ошибка (например, предварительная вставка, которая может нарушать уникальное ограничение):

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Ответ 4

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

$stmt->rowCount();

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

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

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

Ответ 5

Другой способ:

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

Ответ 6

if($stmt->execute()){
    //TRUE
}
else{
   //FALSE
}