2013-06-30 2 views
0

Я меняю много файлов с mysql на mysqli. Я использую это, чтобы сделать это: https://wikis.oracle.com/display/mysql/Converting+to+MySQLiИзменение из mysql в mysqli ошибка кода

Мой файл подключений (для удобства я выбрал ненужный код, например, для обработки ошибок) создает ошибки, которые я не знаю, как исправить. Orignial код:

$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'"); 

Редактировать - обновлен, чтобы включить полуточку, которую я пропустил во время копирования и вставки.

Edit 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; 
+0

Просьба перечислить ошибки, которые вы получаете. Кроме того, у вас есть точка с запятой в конце строки 'mysqli_connect()' (можете ли вы ее вставить, если вы это сделаете)? – binki

+0

Я не уверен, почему вы храните его в переменной globals, но я бы удалил эту часть $ conn = mysqli_connect («$ localhost», «$ dbusername», «$ dbpass»)). И я бы не хотел предлагать это, так как это было бы большим усилием, но подумайте о переходе на PDO вместо mysqli – Kris

+0

Связанный: http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php –

ответ

2

14 [Line 14] Пожалуйста, проверьте код для синтаксического анализа ошибок, мы не смогли разобрать "". Конверсия будет неполным!».

Эта ошибка вызвана пространством перед ( в вашем mysql_connect() вызова. Замена его $conn=mysql_connect("$localhost", "$dbusername", "$dbpass"); снимает это предупреждение выход на MySQLConverterTool.

Оставшиеся две ошибки вещи, которые вы должны иметь дело с на самом деле, глядя, себя, на разницу между mysql_connect() и mysqli_connect(). mysql_connect() «s первый аргумент, $server, может быть отформатирован как hostname:port тогда с mysqli_connect() вы бы передать только hostname первого аргумента и передать port в качестве необязательного пятого параметра. Кроме того, mysqli бы вы указали базу данных в вызове mysqli_connect() вместо отдельной функции, аналогичной mysql_select_db().

Я предлагаю, чтобы в случае необходимости вы использовали инструмент конвертера, чтобы преобразовать весь исходный код из mysql в mysqli , за исключением для этих строк с предупреждениями в них. Только вы знаете, в какой формат входит "$localhost": если он может содержать информацию о портах, вы должны отделить информацию о порте. Вероятно, вы должны установить базу данных для использования в mysqli_connect() вместо автоматического преобразования USE $db преобразователя. Это именно то, что конвертер пытается вам сказать :-).

Просто к сведению, я бы не сказал:

Мой файл подключения (я взял, что я считаю ненужным код, такой как обработка для простоты ошибки) создает ошибки, которые я не знаю, как исправить.

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

+0

Да, просто нужно было правильно подключиться. Спасибо за вашу помощь. Было действительно простое решение с использованием инструмента преобразования в конце. – steve

0

Вы забыли точкой с запятой:

$conn=($GLOBALS["___mysqli_ston"] = mysqli_connect("$localhost", "$dbusername", "$dbpass")); //<--- 
+0

* Редактировать - обновить, чтобы включить полуплот, который я пропустил при копировании и вставке. * –

+0

Была проблема с копией и вставкой, потому что я удалил обработку ошибок и удалил также двоеточие, а также – steve

-1

3306 - это порт. Чтобы найти порт, используйте ниже:

$port = ini_get("mysql.default_port"); 
echo "the port ". $port; 

я попробовал код мой результат порт , но без номера?

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