Intereting Posts

Как изменить mysql на mysqli?

Основываясь на этом коде ниже, я использую для регулярного mysql, как я могу преобразовать его в mysqli?

Это так же просто, как изменение ** mysql _query ($ sql) ; to mysqli _query ($ sql) ; ? **

<?PHP //in my header file that is included on every page I have this $DB["dbName"] = "emails"; $DB["host"] = "localhost"; $DB["user"] = "root"; $DB["pass"] = ""; $link = mysql_connect($DB['host'], $DB['user'], $DB['pass']) or die("<center>An Internal Error has Occured. Please report following error to the webmaster.<br><br>".mysql_error()."'</center>"); mysql_select_db($DB['dbName']); // end header connection part // function from a functions file that I run a mysql query through in any page. function executeQuery($sql) { $result = mysql_query($sql); if (mysql_error()) { $error = '<BR><center><font size="+1" face="arial" color="red">An Internal Error has Occured.<BR> The error has been recorded for review</font></center><br>'; if ($_SESSION['auto_id'] == 1) { $sql_formatted = highlight_string(stripslashes($sql), true); $error .= '<b>The MySQL Syntax Used</b><br>' . $sql_formatted . '<br><br><b>The MySQL Error Returned</b><br>' . mysql_error(); } die($error); } return $result; } // example query ran on anypage of the site using executeQuery function $sql='SELECT auto_id FROM friend_reg_user WHERE auto_id=' .$info['auto_id']; $result_member=executequery($sql); if($line_member=mysql_fetch_array($result_member)){ extract($line_member); } else { header("location: index.php"); exit; } ?> 

Первое, что нужно сделать, вероятно, mysql_* бы в замене каждого mysql_* функции mysql_* его эквивалентом mysqli_* , по крайней мере, если вы захотите использовать процедурный API, что было бы проще, учитывая, что у вас уже есть код, основанный на MySQL API, который является процедурным.

Чтобы помочь в этом, краткое описание функции расширения MySQLi, безусловно, будет полезным.

Например:

  • mysql_connect будет заменен на mysqli_connect
  • mysql_error будет заменен mysqli_error и / или mysqli_connect_error , в зависимости от контекста
  • mysql_query будет заменен на mysqli_query
  • и так далее

Обратите внимание, что для некоторых функций вам может потребоваться тщательно проверить параметры: может быть, есть некоторые различия здесь и там – но не так много, я бы сказал: mysql и mysqli основаны на одной и той же библиотеке (libmysql; at наименее для PHP <= 5.2)

Например:

  • с mysql, вы должны использовать подключенный mysql_select_db , чтобы указать, в какой базе данных вы хотите выполнять свои запросы
  • mysqli, с другой стороны, позволяет указать это имя базы данных в качестве четвертого параметра для mysqli_connect .
  • Тем не менее, есть также функция mysqli_select_db которую вы можете использовать, если хотите.

Как только вы закончите с этим, попробуйте выполнить новую версию своего скрипта … И проверьте, все ли работает; если нет … Время для поиска ошибок 😉

(Я понимаю, что это старо, но оно все еще появляется …)

Если вы замените mysql_* на mysqli_* то имейте в виду, что для всей загрузки функций mysqli_* необходимо mysqli_* ссылку базы данных.

Например:

 mysql_query($query) 

становится

 mysqli_query($link, $query) 

Т.е. требуется большая проверка.

Самый простой способ я всегда справляюсь с этим

Где $ con = mysqli_connect ($ serverName, $ dbusername, $ dbpassword);

Замена 3-х шагов в следующем порядке

  1. Все " mysql_select_db ( " с " mysqli_select_db ($ con, "
  2. Все " mysql_query ( " с " mysqli_query ($ con, " и
  3. Все « mysql_ » с « mysqli_ ».

Это работает для меня каждый раз

Я бы предпочел использовать PDO для вашего доступа SQL.

Тогда это всего лишь случай изменения драйвера и обеспечения работы SQL на новом бэкэнд. В теории. Перенос данных – это другая проблема.

Абсолютный доступ к базе данных велик.

Если у вас есть много файлов для изменения в ваших проектах, вы можете создавать функции с теми же именами, что и функции mysql, а в функциях сделать преобразование, как этот код:

 $sql_host = "your host"; $sql_username = "username"; $sql_password = "password"; $sql_database = "database"; $mysqli = new mysqli($sql_host , $sql_username , $sql_password , $sql_database ); /* check connection */ if ($mysqli->connect_errno) { printf("Connect failed: %s\n", $mysqli->connect_error); exit(); } function mysql_query($query){ $result = $mysqli->query($query); return $result; } function mysql_fetch_array($result){ if($result){ $row = $result->fetch_assoc(); return $row; } } function mysql_num_rows($result){ if($result){ $row_cnt = $result->num_rows;; return $row_cnt; } } 

Краткая версия преобразования mysql в mysqli

 mysql_connect ---> mysqli_connect mysql_select_db ---> mysqli_select_db mysql_error ---> mysqli_connect_error() mysql_query ---> mysqli_query mysql_fetch_assoc ---> mysqli_fetch_assoc 

В случае больших проектов многие файлы должны быть изменены, а также если предыдущая версия проекта PHP была 5.6, а новая – 7.1, вы можете создать новый файл sql.php и включить его в заголовок или где-нибудь, где вы используете все время и потребности sql-соединения. Например:

 //local $sql_host = "localhost"; $sql_username = "root"; $sql_password = ""; $sql_database = "db"; $mysqli = new mysqli($sql_host , $sql_username , $sql_password , $sql_database ); /* check connection */ if ($mysqli->connect_errno) { printf("Connect failed: %s\n", $mysqli->connect_error); exit(); } // /* change character set to utf8 */ if (!$mysqli->set_charset("utf8")) { printf("Error loading character set utf8: %s\n", $mysqli->error); exit(); } else { // printf("Current character set: %s\n", $mysqli->character_set_name()); } if (!function_exists('mysql_real_escape_string')) { function mysql_real_escape_string($string){ global $mysqli; if($string){ // $mysqli = new mysqli($sql_host , $sql_username , $sql_password , $sql_database ); $newString = $mysqli->real_escape_string($string); return $newString; } } } // $mysqli->close(); $conn = null; if (!function_exists('mysql_query')) { function mysql_query($query) { global $mysqli; // echo "DAAAAA"; if($query) { $result = $mysqli->query($query); return $result; } } } else { $conn=mysql_connect($sql_host,$sql_username, $sql_password); mysql_set_charset("utf8", $conn); mysql_select_db($sql_database); } if (!function_exists('mysql_fetch_array')) { function mysql_fetch_array($result){ if($result){ $row = $result->fetch_assoc(); return $row; } } } if (!function_exists('mysql_num_rows')) { function mysql_num_rows($result){ if($result){ $row_cnt = $result->num_rows;; return $row_cnt; } } } if (!function_exists('mysql_free_result')) { function mysql_free_result($result){ if($result){ global $mysqli; $result->free(); } } } if (!function_exists('mysql_data_seek')) { function mysql_data_seek($result, $offset){ if($result){ global $mysqli; return $result->data_seek($offset); } } } if (!function_exists('mysql_close')) { function mysql_close(){ global $mysqli; return $mysqli->close(); } } if (!function_exists('mysql_insert_id')) { function mysql_insert_id(){ global $mysqli; $lastInsertId = $mysqli->insert_id; return $lastInsertId; } } if (!function_exists('mysql_error')) { function mysql_error(){ global $mysqli; $error = $mysqli->error; return $error; } }