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

Кодирование не имеет значения в этой ситуации, поскольку мы имеем дело только с символами ASCII, и они оба кодируют ASCII одинаково. Проблема в

  1. Ваши данные различны в обоих случаях, обратите внимание на пробелы, предшествующие Directory и ControlCase в вашем первом примере, но не представлены во втором.

    [116 ]
  2. Вам необходимо избежать обратной косой черты в строке ruby ​​или интерпретировать их как escape-символы

Как только вы решите эти две проблемы, вы получите тот же результат:

PS:

PS H:\> $String = "
>>
>>     Directory: D:\OneDrive -
>>     ControlCase\jt-work\evidance-collection\evidances-text\PCI_Evidences_CCIN-CAS-VKAUS\evidences
>>
>>
>> Mode                LastWriteTime     Length Name
>> ----                -------------     ------ ----
>> -a---        2019-01-16   1:14 PM       7073 21_to_calc_hash.ps1
>> -a---        2019-01-16   1:15 PM       9973 CCIN-CAS-VKAUS_pci_evidence_Q21.txt
>> -a---        2019-01-15   9:37 PM      67399 CCIN-CAS-VKAUS_pci_evidence_Q23.txt
>> -a---        2019-01-15   9:37 PM       5055 CCIN-CAS-VKAUS_pci_evidence_Q34.txt
>> -a---        2019-01-15   9:38 PM      10820 CCIN-CAS-VKAUS_pci_evidence_Q45.txt
>> -a---        2019-01-15   9:38 PM      13129 CCIN-CAS-VKAUS_pci_evidence_Q50.txt
>> -a---        2019-01-15   9:38 PM       7163 CCIN-CAS-VKAUS_pci_evidence_Q67.txt
>> -a---        2019-01-15   9:39 PM       4301 CCIN-CAS-VKAUS_pci_evidence_Q69.txt
>> -a---        2019-01-15   9:39 PM       2900 CCIN-CAS-VKAUS_pci_evidence_Q81.txt
>>
>> "
PS H:\> Get-Hash($string)
6454c0ecf1700448fb2496037a1e9ce496b185cd

Ruby:

>> varj = " 
..  
..     Directory: D:\\OneDrive - 
..     ControlCase\\jt-work\\evidance-collection\\evidances-text\\PCI_Evidences_CCIN-CAS-VKAUS\\evidences 
..  
..  
.. Mode                LastWriteTime     Length Name 
.. ----                -------------     ------ ---- 
.. -a---        2019-01-16   1:14 PM       7073 21_to_calc_hash.ps1 
.. -a---        2019-01-16   1:15 PM       9973 CCIN-CAS-VKAUS_pci_evidence_Q21.txt 
.. -a---        2019-01-15   9:37 PM      67399 CCIN-CAS-VKAUS_pci_evidence_Q23.txt 
.. -a---        2019-01-15   9:37 PM       5055 CCIN-CAS-VKAUS_pci_evidence_Q34.txt 
.. -a---        2019-01-15   9:38 PM      10820 CCIN-CAS-VKAUS_pci_evidence_Q45.txt 
.. -a---        2019-01-15   9:38 PM      13129 CCIN-CAS-VKAUS_pci_evidence_Q50.txt 
.. -a---        2019-01-15   9:38 PM       7163 CCIN-CAS-VKAUS_pci_evidence_Q67.txt 
.. -a---        2019-01-15   9:39 PM       4301 CCIN-CAS-VKAUS_pci_evidence_Q69.txt 
.. -a---        2019-01-15   9:39 PM       2900 CCIN-CAS-VKAUS_pci_evidence_Q81.txt 
..  
.. "
>> puts Digest::SHA1.hexdigest(varj.encode(Encoding::UTF_8))
=> 6454c0ecf1700448fb2496037a1e9ce496b185cd
>> puts Digest::SHA1.hexdigest(varj.encode(Encoding::ISO_8859_1))
=> 6454c0ecf1700448fb2496037a1e9ce496b185cd

Редактировать:

Если вы все еще не можете Соответствие, я думаю, лучший подход - сравнить байтовые значения каждой строки, чтобы определить различия.

PS:

PS H:\> $enc = [system.Text.Encoding]::UTF8
PS H:\> $enc.GetBytes($String)
10
10
32
32
...

Ruby:

>> varj_Encoded.bytes.to_a
=> [10, 10, 32, 32, ...
51
задан PoGibas 13 December 2017 в 03:56
поделиться

4 ответа

Я не верю, что это возможно, хотя в этом я могу ошибаться. Я хотел бы спросить, почему вы хотите это сделать. Вместо того, чтобы выполнять операции с классом вместо экземпляров, возможно, вам просто нужен один экземпляр для всего приложения? В этом случае вам, вероятно, следует использовать одноэлементный шаблон .

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

Например:

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


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

d скажем: и mysql, и mysqli основаны на одной и той же библиотеке (libmysql; по крайней мере для PHP <= 5.2)

Например:

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


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

d скажем: и mysql, и mysqli основаны на одной и той же библиотеке (libmysql; по крайней мере для PHP <= 5.2)

Например:

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


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

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

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

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

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

    70
    ответ дан 7 November 2019 в 09:54
    поделиться

    Я только что создал функцию с теми же именами, чтобы преобразовать и перезаписать к новому php7:

    $host =     "your host";      
    $un = "username";    
    $pw = "password";       
    $db = "database"; 
    
    $MYSQLI_CONNECT = mysqli_connect($host, $un, $pw, $db);
    
    function mysql_query($q) {
        global $MYSQLI_CONNECT;
        return mysqli_query($MYSQLI_CONNECT,$q);
    }
    
    function mysql_fetch_assoc($q) {
        return mysqli_fetch_assoc($q);
    }
    
    function mysql_fetch_array($q){
        return mysqli_fetch_array($q , MYSQLI_BOTH);
    }
    
    function mysql_num_rows($q){
        return mysqli_num_rows($q);
    }
    
    function mysql_insert_id() {
        global $MYSQLI_CONNECT;
        return mysqli_insert_id($MYSQLI_CONNECT);
    }
    
    function mysql_real_escape_string($q) {
        global $MYSQLI_CONNECT;
        return mysqli_real_escape_string($MYSQLI_CONNECT,$q);
    }
    

    Это работает на меня, я надеюсь, что это будет работать на Вас всех, если я ошибочный, исправите меня.

    0
    ответ дан 7 November 2019 в 09:54
    поделиться

    Хотя этой темой является старое десятилетие, я все еще часто требую к 'backpatch' существующим приложениям, которые положились mysql, расширение — исходные программисты было слишком лениво, чтобы осуществить рефакторинг весь их код и просто сказать клиентам удостоверяться, что они выполняют последнюю доступную версию PHP 5.6.

    PHP 5.6 теперь официально удерживается от использования; другими словами, у разработчиков было десятилетие, чтобы избавиться от их зависимостей от mysql и переместиться в PDO (или, ну, в общем, mysqli...). Но... изменение такого большого количества унаследованного кода является дорогим, и не каждый менеджер готово заплатить в течение неисчислимых часов для 'исправления' проектов с десятками тысяч строк.

    я искал много решений, и, в моем случае, я часто использовал решение, представленное @esty-shlomovitz —, но тем временем, я нашел что-то еще лучше:

    https://www.phpclasses.org/package/9199-PHP-Replace-mysql-functions-using-the-mysqli-extension.html

    (необходимо зарегистрироваться для загрузки его, но это просто занимает минуту)

    Это всего два файла, которые действуют как общедоступные замены для целого mysql расширение и очень умно эмулируют в значительной степени все (использование mysqli) без потребности волноваться очень об этом. Конечно, это не идеальное решение, но очень вероятно это будет работать в 99% всех случаев там.

    кроме того, хорошее учебное руководство для контакта с работой по дому миграции (перечисляющий многие распространенные ошибки при миграции) может также быть найдено здесь: https://www.phpclasses.org/blog/package/9199/post/3-Smoothly-Migrate-your-PHP-Code-using-the-Old-MySQL-extension-to-MySQLi.html

    (при чтении этого в 2030 и веб-сайта PHPclasses, снижается, ну, в общем, можно всегда пробовать archive.org :-)

    0
    ответ дан 7 November 2019 в 09:54
    поделиться

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

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

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

    6
    ответ дан 7 November 2019 в 09:54
    поделиться
    Другие вопросы по тегам:

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