Я меняю много файлов с mysql на mysqli. Я использую это для этого: https://wikis.oracle.com/display/mysql/Converting+to+MySQLi
Мой файл подключений (я понял, что я считаю ненужным кодом, например, для обработки ошибок) просто создает ошибки, которые я не знаю, как их исправить. Ориентировочный код:
$conn=mysql_connect ("$localhost", "$dbusername", "$dbpass"); mysql_select_db("$db", $conn);
Новый код:
$conn=($GLOBALS["___mysqli_ston"] = mysqli_connect("$localhost", "$dbusername", "$dbpass")); ((bool)mysqli_query( $conn, "USE $db"));
Вышеприведенный код – это просто мое подключение к файлу базы данных, которое используется в каждом файле через
include_once("includes/connnect.php");
Предыдущий код, который подключается к базе данных и таблице, должен работать с приведенным ниже кодом, потому что у меня есть много запросов, как показано ниже, и легче изменить файл connect.php, чем много файлов:
$con1 = mysqli_query($GLOBALS["___mysqli_ston"], "SELECT * FROM table1 WHERE id='$id'");
Изменить – обновить, чтобы включить полуплот, который я пропустил во время копирования и вставки.
Изменить 2 – Включить сообщения об ошибках / предупреждения из инструмента преобразования
14 [Line 14] Please check your code for parse errors, we failed to parse " ". Conversion will be incomplete!". 14 [Line 14] Cannot analyze server parameter to extract host, socket and port! Conversion cannot be performed automatically. You must manually check the result of the conversion. 16 [Line 16] mysql_select_db(string database_name [...]) is emulated using mysqli_query() and USE database_name. This is a possible SQL injection security bug as no tests are performed what value database_name has. Check your script!
Там, где строка 14
$conn=mysql_connect ("$localhost", "$dbusername", "$dbpass");
и строка 16
mysql_select_db("$db", $conn);
EDIT – рабочий ответ ниже. Инструмент преобразования отлично работал для всех моих других файлов. Просто пришлось изменить способ подключения к базе данных в моем файле подключения
$conn=($GLOBALS["___mysqli_ston"] = mysqli_connect("$localhost", "$dbusername", "$dbpass", "$db", "3306")) or die ('Cannot connect to the database because: ' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)));
3306 – это порт. Чтобы найти порт, используйте следующее:
$port = ini_get("mysql.default_port"); echo "the port ". $port;
14 [Строка 14] Пожалуйста, проверьте свой код на наличие ошибок синтаксического анализа, нам не удалось проанализировать «». Конверсия будет неполной! ».
Эта ошибка вызвана пробелом перед вызовом mysql_connect()
. Заменяя его на $conn=mysql_connect("$localhost", "$dbusername", "$dbpass");
удаляет этот вывод предупреждения MySQLConverterTool.
Остальные две ошибки – это то, с чем вам приходится иметь дело, фактически глядя на разницу между mysql_connect()
и mysqli_connect()
. Первый аргумент mysql_connect()
, $server
, может быть отформатирован как hostname:port
тогда как с mysqli_connect()
вы передадите только hostname
в свой первый аргумент и передаете port
в качестве необязательного пятого параметра. Кроме того, mysqli хотел бы указать базу данных в mysqli_connect()
вместо отдельной функции, аналогичной mysql_select_db()
.
Я полагаю, что если вам нужно, вы используете инструмент конвертера, чтобы преобразовать весь исходный код из mysql в mysqli, за исключением этих строк с предупреждениями в них. Только вы знаете, в какой формат "$localhost"
входит: если он может содержать информацию о портах, вы должны отделить информацию о порте. Вероятно, вы должны установить базу данных для использования в mysqli_connect()
вместо использования автоматической конвертации USE $db
конвертера. Это именно то, что конвертер пытается вам сказать :-).
Просто отметить, я бы не сказал:
Мой файл подключений (я понял, что я считаю ненужным кодом, например, для обработки ошибок) просто создает ошибки, которые я не знаю, как их исправить.
Вышеизложенное указывает на то, что PHP-код, созданный конвертером, сам по себе бросает предупреждения и ошибки PHP во время выполнения (не то, что конвертер жалуется на ваш исходный код или информирует вас о том, что вам действительно нужно выполнить ручное преобразование, как я говорил выше) , Вот почему мы искали ошибки, такие как некорректная точка с запятой, которую вы исправили.
Вы забыли точку с запятой:
$conn=($GLOBALS["___mysqli_ston"] = mysqli_connect("$localhost", "$dbusername", "$dbpass")); //<---
3306 – это порт. Чтобы найти порт, используйте следующее:
$port = ini_get("mysql.default_port"); echo "the port ". $port;
Я пробовал код, мой результат – это порт, но не номер?