php mysqli connect errno
PHP mysqli connect_errno() Function
Return an error code from the last connection error, if any:
Look at example of procedural style at the bottom.
Definition and Usage
The connect_errno / mysqli_connect_errno() function returns the error code from the last connection error, if any.
Syntax
Object oriented style:
Procedural style:
Technical Details
Return Value: | Returns an error code value. Zero if no error occurred |
---|---|
PHP Version: | 5+ |
Return an error code from the last connection error, if any:
We just launched
W3Schools videos
COLOR PICKER
LIKE US
Get certified
by completing
a course today!
CODE GAME
Report Error
If you want to report an error, or if you want to make a suggestion, do not hesitate to send us an e-mail:
Thank You For Helping Us!
Your message has been sent to W3Schools.
Top Tutorials
Top References
Top Examples
Web Courses
W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.
mysqli::$error
Описание
Возвращает сообщение об ошибке последнего вызова функции MySQLi, который может успешно выполниться или провалиться.
Список параметров
Возвращаемые значения
Строка с описанием ошибки. Пустая строка, если ошибки нет.
Примеры
Результат выполнения данных примеров:
Смотрите также
User Contributed Notes 7 notes
The mysqli_sql_exception class is not available to PHP 5.05
?>
This would output something like:
Unexpected PHP error [mysqli::query() [function.query]: (42S22/1054): Unknown column ‘XXname’ in ‘field list’] severity [E_WARNING] in [G:\database.php] line [249]
Very frustrating as I wanted to also catch the sql error and print out the stack trace.
( MYSQLI_REPORT_OFF ); //Turn off irritating default messages
//Do stuff with the result
?>
Prints out something like:
Error No: 1054
Unknown column ‘XXname’ in ‘field list’
Query:
SELECT XXname FROM customer_table
This will actually print out the error, a stack trace and the offending sql statement. Much more helpful when the sql statement is generated somewhere else in the code.
If you have the following situation
you don’t get an error-message, if the ROLLBACK-Query didn’t failed, too. In order to get the right error-message you have to write:
I had to set mysqli_report(MYSQLI_REPORT_ALL) at the begin of my script to be able to catch mysqli errors within the catch block of my php code.
Initially, I used the below code to throw and subsequent catch mysqli exceptions
This works fine and I ‘m able to trap all mysqli errors
Please note that the string returned may contain data initially provided by the user, possibly making your code vulnerable to XSS.
So even if you escape everything in your SQL query using mysqli_real_escape_string(), make sure that if you plan to display the string returned by mysqli_error() you run that string through htmlspecialchars().
As far as I can tell the two escape functions don’t escape the same characters, which is why you need both (the first for SQL and the second for HTML/JS).
MySQLi раскладываем все по полочкам
Для кого это статья? Первоочередной целью написания статьи было именно «разложить все по полочкам» для тех, кто уже работал с mysqli, но не вникал глубоко, а быстренько написал свои обертки и забыл про оригинальный синтаксис. Я постарался разъяснить нюансы, с которым столкнулся сам, при переносе данных из большой и очень старой БД, спроектированной человеком, не знающим про нормализации, в новую, с сильно изменившейся структурой.
Можно ли читать эту статью людям, которые все еще используют старое расширение mysql и только думающие об перехода на PDO или MySqli? Думаю даже нужно.
MySqli или PDO
Последние годы я писал сайты исключительно на фреймворках, что избавляло меня от работы с БД напрямую. Некоторое время назад начал работу над сайтом на чистом php и задался вопросом, что использовать вместо устаревшего и нерекомендованного к использованию старого расширения PHP MySQL.
Выбирать нужно было между MySqli и PDO. После не очень длительного изучения решил остановиться на MySqli, так как, как мне тогда казалось, он полностью идентичен PDO, за исключением того, что нет возможности отказаться от MySQL в пользу чего-то другого. Как я напишу ниже это не совсем так, минимум одно заметное отличие есть.
MySqli рекомендован к использованию самими разработчиками PHP.[1]
ООП и процедурный интерфейс
MySqli позволяет писать код как в ООП стиле так и в процедурном. Мне ближе ООП как и большинству из хабр сообщества, поэтому в этом статье будет использован именно он.
Три основные класса
Соединение с БД
Способ первый. Если вам нужно просто создать соединение.
Способ второй. Если вам нужно использовать опции соединения.
С помощью $mysqli->connect_errno и $mysqli->connect_error мы получаем описание и код ошибки, возникших при соединении. И new mysqli() и $mysqli->real_connect() при ошибках соединений вызывают ошибку PHP Warning. Поэтому вывод ошибок с помощью выше упомянутых функций имеет смысл, если у вас отключено отображение ошибок PHP, например, на рабочем сервере, либо если вам нужно как-то обработать эти данные. Я упомнил здесь об этом, потому что не все функции MySQLi вызывают PHP Warning в случае ошибки, и для того что бы узнать, что произошла ошибка необходимо обязательно обращаться к специальным функциям, об этом ниже.
Полученный при соединении объект мы присвоили переменной $mysqli, для того чтобы использовать его в дальнейшем. Это очевидно для ООП стиля, но и для процедурного стиля этот объект также необходим, в этом отличие от устаревшего расширения MySQL, где ссылку на соединение необязательно было передавать при каждом использовании mysql функций.
Буферизированные и не буферизированные результаты
Прежде чем рассказывать дальше, хотелось бы объяснить разницу между этими двумя типами результатов.
Рассмотрим небуферизированный результат. В этом случае вы можете начинать читать результаты, не дожидаясь пока mysql сервер получит результат полностью.
Буферизированный результат лишен этих недостатков и соответственно лишен перечисленных преимуществ.
«Классические» запросы
В MySqli оставили возможность «классических» запросов: когда пользователю предлагается самостоятельно заниматься безопасностью передаваемых запросов так, как это было в устаревшем расширении MySQL. Для этого предлагается использовать функцию $mysqli->real_escape_string(), с помощью которой необходимо обрабатывать все данные перед помещением их в запрос.
Так же как и с соединением есть два способа сделать такой запрос короткий и длинный.
Возможные константы:
MYSQLI_STORE_RESULT – вернет буферизированный результат, значение по умолчанию
MYSQLI_USE_RESULT – небуферизированный
Функции $mysqli->use_result() или $mysqli->store_result() так же используются при мульти запросах (запросах состоящих из нескольких запросов). Мульти запросы в этой статье рассмотрены не будут.
И тот и другой синтаксисы вернут результат в виде объекта mysqli_result, который представляет собой удобный интерфейс для работы с результатом, как с буферизированным так и не с небуферизированным.
Подготовленные запросы
Два способа создания подготовленного запроса.
Различия в том, для какого объекта вызываются функции получения информации об ошибке. Мне второй способ кажется удобнее, потому что проверки на ошибки можно объединить в один блок if c другими функциями mysqli_stmt. Как это сделать будет видно в примерах ниже.
Класс mysqli_result и работа с результатом с помощью него
Как было показано выше, объект mysqli_result вы могли получить как с помощью «классического» запроса с помощью класса mysqli, тогда он может быть как буферизированный так и небуферизированный, так и с помощью класса mysqli_stmt, тогда он буферизированный. От того какой результат вы получили, зависит работа функций этого класса, поэтому нужно хорошо понимать, что если ваш запрос небуферизированный вы не располагаете всем результатом и соответственно не можете знать сколько строк в результате, и читать его можно только по-порядку строка за строкой.
object ( Book ) [ 4 ]
private ‘some1’ => int 1
public ‘some2’ => int 2
protected ‘id’ => int 382
mysqli::real_connect
Описание
Устанавливает соединение с СУБД MySQL.
Эта функция отличается от mysqli_connect() :
С помощью функции mysqli_options() можно задать различные настройки подключения.
Список параметров
Может быть именем хоста или IP-адресом. Передача null или строки «localhost» этому параметру означает, что в качестве хоста будет использоваться локальная машина, на которой запущен скрипт. Если есть такая возможность, будут использоваться пайпы вместо протокола TCP/IP.
Имя пользователя MySQL.
Если параметр задан, его значение будет использоваться в качестве имени базы данных по умолчанию при выполнении запросов.
Порт, к которому будет производиться подключение.
Задаёт номер порта для подключения к серверу MySQL.
С помощью параметра flags можно задать некоторые настройки соединения:
Возвращаемые значения
Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.
Примеры
Пример #1 Пример использования mysqli::real_connect()
Объектно-ориентированный стиль при расширении класса mysqli
Результат выполнения данных примеров:
Примечания
MySQLnd всегда подразумевает кодировку, которую использует по умолчанию сервер. Эта кодировка передаётся во время установки соединения/авторизации, которые использует mysqlnd.
Смотрите также
mysqli_real_connect
Описание
Устанавливает соединение с СУБД MySQL.
Эта функция отличается от mysqli_connect() :
С помощью функции mysqli_options() можно задать различные настройки подключения.
Список параметров
Только для процедурного стиля: Идентификатор соединения, полученный с помощью mysqli_connect() или mysqli_init()
Может быть именем хоста или IP адресом. Передача NULL или строки «localhost» этому параметру означает, что в качестве хоста будет использоваться локальная машина, на которой запущен скрипт. Если есть такая возможность, будут использоваться пайпы вместо протокола TCP/IP.
Имя пользователя MySQL.
Если параметр задан, его значение будет использоваться в качестве имени базы данных по умолчанию при выполнении запросов.
Specifies the port number to attempt to connect to the MySQL server.
Задает номер порта для подключения к серверу MySQL.
С помощью параметра flags можно задать некоторые настройки соединения:
Имя | Описание |
---|---|
MYSQLI_CLIENT_COMPRESS | Использовать протокол сжатия |
MYSQLI_CLIENT_FOUND_ROWS | возвращать количество строк, подошедших условиям выборки, вместо количества затронутых запросом строк |
MYSQLI_CLIENT_IGNORE_SPACE | Допускать пробелы после имен функций. Делает все имена функций зарезервированными словами. |
MYSQLI_CLIENT_INTERACTIVE | Допускать interactive_timeout секунд (вместо wait_timeout) простоя, прежде чем закрыть соединение |
MYSQLI_CLIENT_SSL | Использовать SSL (шифрование) |
Возвращаемые значения
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Примеры
Пример #1 Пример использования mysqli::real_connect()
Объектно-ориентированный стиль при расширении класса mysqli
Результат выполнения данных примеров:
Примечания
MySQLnd всегда подразумевает кодировку, которую использует по умолчанию сервер. Эта кодировка передается во время установки соединения/авторизации, которые использует mysqlnd.