Как изменить код поиска mysql / php на mysqli [duplicate]

Да, это плохо ...

== означает, что ваши две ссылки на строки - это точно один и тот же объект. Возможно, вы слышали, что это так, потому что Java хранит личную таблицу (что она делает), но это не всегда так. Некоторые строки загружаются по-разному, построены из других строк и т. Д., Поэтому вы никогда не должны предполагать, что две одинаковые строки хранятся в одном месте.

Equals делает реальное сравнение для вас.

37
задан PoGibas 13 December 2017 в 14:56
поделиться

9 ответов

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

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

Например:

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

Например:

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

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

61
ответ дан Peter Mortensen 17 August 2018 в 09:56
поделиться
  • 1
    До тех пор, пока вы хотите сохранить процедурный код, переключение с mysql на mysqli не должно быть слишком сложным; но если ваша кодовая база не слишком велика (т. е. переход от одного API к другому не означает слишком много работы), вы можете использовать объектно-ориентированный API; это потребует больше работы, хотя ... И если вы собираетесь переписывать OO-API, я бы пошел с PDO вместо mysqli ... – Pascal MARTIN 7 September 2009 в 20:10
  • 2
    Я имею в виду читать на 2 весь день сейчас, из того, что я понимаю, не является основным отличием PDO, что PDO позволяет вам использовать различную систему БД. ЕСЛИ это единственное преимущество, тогда это не помогло бы в моем случае, так как мне никогда не понадобится другое для этого приложения. – JasonDavis 7 September 2009 в 20:13
  • 3
    В этом случае mysqli, вероятно, будет просто отлично :-) тем более, что у вас уже есть код, построенный на mysql. – Pascal MARTIN 7 September 2009 в 20:24
  • 4
    Существуют средства автоматизации процесса миграции, например: github.com/philip/MySQLConverterTool – marcovtwout 4 August 2015 в 08:21
  • 5
    Обратите внимание, что некоторые процедурные функции mysqli_* имеют первые два параметра. Старый стиль был mysql_*(q, link, ...), а новый стиль - mysqli_*(link, q, ...). – Mikko Rantalainen 16 December 2015 в 08:26

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

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

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

  1. Все "mysql_select_db (" с "mysqli_select_db ($ con,"
  2. Все "mysql_query (" с "mysqli_query ($ con," и
  3. Все " mysql_ "с" mysqli _ ".

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

11
ответ дан Aduragbemi Ogundijo 17 August 2018 в 09:56
поделиться
  • 1
    Я бы добавил поиск по всем function строкам и поместив global $con; поверх содержимого функции, поскольку $con, определенный вне функции, будет недоступен по умолчанию из-за области переменной в PHP. – Chris Trynkiewicz 1 October 2017 в 15:14

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

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

Доступ к реестру базы данных велик.

3
ответ дан Aiden Bell 17 August 2018 в 09:56
поделиться

В случае больших проектов много файлов для изменения, а также если предыдущая версия проекта 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;
    }
}
0
ответ дан Davide Alberani 17 August 2018 в 09:56
поделиться
  • 1
    и как я должен использовать это для тестирования с функциями mysqli? Например, сначала проверяется файл, если mysql_query завершает работу, если это так используется для 5.6, но как проверить, работает ли mysqli_query? – alex 4 February 2018 в 11:18
  • 2
    Как я могу проверить тест mysqli_query (???, $ q); – alex 4 February 2018 в 11:34
  • 3
    и использовать его: & lt; pre & gt; $ id_cat = (int) '4'; $ sql = & quot; УДАЛИТЬ ИЗ категорий WHERE id = '$ id_cat' ИЛИ ​​parent_id = '$ id_cat' & quot ;; mysql_query ($ sql) или die ('Ошибка SQL! & lt; br />'.$sql.'<br / & gt;'. mysql_error ()); & Lt; / предварительно & GT; – Svetoslav 6 February 2018 в 15:49

Если у вас много файлов для изменения в ваших проектах, вы можете создавать функции с такими же именами, как функции 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;
       }
}
1
ответ дан Esty Shlomovitz 17 August 2018 в 09:56
поделиться

Вот полный учебник, как сделать все правильно и быстро. Я использовал его после обновления хостинга для моих клиентов с 5.4 (OMG !!!) до версии 7.x PHP.

1. Определение соединения

Прежде всего, вам нужно поместить соединение в новую переменную $link или $con или что угодно.

Пример

Измените соединение с:

@mysql_connect($host, $username, $password) or die("Error message...");
@mysql_select_db($db);

или

@mysql_connect($host, $username, $password, $db) or die("Error message...");

на:

$con = mysqli_connect($host, $username, $password, $db) or die("Error message...");

2. mysql_ * modify

С Notepad ++ я использую «Найти в файлах» (Ctrl + Shift + f):

в в следующем порядке я выбираю «Заменить в файлах»:

  1. mysql_query (-> mysqli_query ($ con,
  2. mysql_error () -> mysqli_error ($ con)
  3. mysql_close () -> mysqli_close ($ con)
  4. mysql_ -> mysqli _

3. настройки

, если вы получаете ошибки, возможно, потому, что ваш $ con недоступен из ваших функций.

Вам нужно добавить global $con; во все ваши функции, например:

function my_function(...) {
    global $con;
    ...
}

Надеюсь, это поможет.

2
ответ дан Meloman 17 August 2018 в 09:56
поделиться

Вы можете сделать массовый поиск и заменить с помощью notepad ++ для следующего: он работал для меня:

Найти: mysql _

Заменить: mysqli _

Найти : _query (

Заменить: _query ($ conn,

Следующие потребности меняются, но зависит от того, как вы подключаетесь ...

Обновить строку подключения в config.php:

$conn = mysqli_connect($db_host, $db_username, $db_password, $db_name) or die("Unable to Connect");

Надеюсь, это поможет.

-1
ответ дан slfan 17 August 2018 в 09:56
поделиться

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

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

Например:

mysql_query($query)

становится

mysqli_query($link, $query)

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

26
ответ дан TigerhawkT3 17 August 2018 в 09:56
поделиться

Короткая версия преобразования 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
0
ответ дан user889030 17 August 2018 в 09:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: