2013-09-22 4 views
0

Код:PHP: mysqli_query и умереть()

Я тестирую простой код, приведенный ниже, чтобы вставить данные в моей базе данных:

mysqli_query($con,"INSERT INTO Persons (Age) VALUES (35) WHERE FirstName='John'") or die("Error"); 

В моей БД я не строку, в которой FirstName=John (это часть теста).

То, что я ожидал увидеть:

Поскольку нет ни в одной строке в моей дб, когда FirstName=John, я ожидал die() послать мне сообщение об ошибке.

Проблема:

Die() не посылает мне сообщение об ошибке. На самом деле я заметил, что die() отправляет мне сообщение об ошибке, когда он не может подключиться к db.

То, что я думаю:

Ну, может быть, это как die() работает ... Но то, как получить информацию, когда запрос не выполняется по другим причинам, чем без связи?

ответ

1

Как указано в руководстве, "mysqli_query() возвращает FALSE при неисправности. Для успешного SELECT, SHOW, DESCRIBE или EXPLAIN запросов mysqli_query() вернет mysqli_result object. Для других успешных запросов mysqli_query() возвратят TRUE."

Таким образом, нет никаких повреждений, если у вас нет строки, где FirstName=John

Вы можете использовать mysqli_affected_rows вернуть количество строк вставлено

0

Die() не срабатывали, потому что запрос успешно запущен. Он ничего не обновил, потому что не было строки с именем John.

Вы должны проверить с помощью affected_rows, чтобы узнать, были ли какие-либо строки изменены с помощью запроса.

2

Это нормально. mysqli_query вернет только FALSE, если запрос не удался, то есть SQL-уровень. Запрашиваемый запрос строк не считается сбоем (так же как пустой результат из запроса SELECT не является отказом). В этих случаях mysqli_query вернет TRUE.

Что нужно сделать, это проверить значение $con->affected_rows, чтобы получить количество строк, затронутых последним запросом, и если это равно 0, умереть.

0

нет ошибки на вашем sql, это просто, что у вас нет строки, вы можете сделать, если с количеством результатов, если это то, что вы хотите выяснить здесь у вас есть процедурный и объектно-ориентированное решение.

http://php.net/manual/en/mysqli.query.php

в вашем случае, чтобы знать, если произошла ошибка:

if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

или узнать результаты

if ($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) { 
    printf("Select returned %d rows.\n", mysqli_num_rows($result)); 

    /* free result set */ 
    mysqli_free_result($result); 
} 
2

Ваш запрос является допустимым запросом и поэтому возвращает mysqli_query true, таким образом, штамп не будет называться

Смежные вопросы