Да, это плохо ...
==
означает, что ваши две ссылки на строки - это точно один и тот же объект. Возможно, вы слышали, что это так, потому что Java хранит личную таблицу (что она делает), но это не всегда так. Некоторые строки загружаются по-разному, построены из других строк и т. Д., Поэтому вы никогда не должны предполагать, что две одинаковые строки хранятся в одном месте.
Equals делает реальное сравнение для вас.
Первым делом, вероятно, будет замена каждого вызова функции mysql_*
с его эквивалентом mysqli_*
, по крайней мере, если вы захотите использовать процедурный API, что было бы проще, учитывая, что у вас уже есть некоторый код, основанный на API MySQL, который является процедурным.
Чтобы помочь в этом, Краткое описание функции расширения MySQLi , безусловно, будет полезным.
Например:
mysql_connect
будет заменен на mysqli_connect
mysql_error
будет заменен на mysqli_error
и / или mysqli_connect_error
, в зависимости от контекста mysql_query
будут заменены на mysqli_query
Обратите внимание, что для некоторых функций вам может потребоваться тщательно проверить параметры: может быть, есть некоторые различия здесь и там - но не это многие, я бы сказал: и mysql, и mysqli основаны на одной и той же библиотеке (libmysql; по крайней мере, для PHP & lt; = 5.2)
Например:
mysql_select_db
, чтобы указать, в какой базе данных вы хотите выполнять свои запросы mysqli_connect
. mysqli_select_db
, которую вы можете использовать, если хотите. Как только вы закончите с этим, попробуйте выполнить новую версию своего скрипта ... И проверьте, все ли работает; если нет ... Время для поиска ошибок; -)
Самый простой способ: я всегда обрабатываю это
, где $ con = mysqli_connect ($ serverName, $ dbusername, $ dbpassword);
Замена 3 шагов в следующем порядке
Это работает для меня каждый раз
function
строкам и поместив global $con;
поверх содержимого функции, поскольку $con
, определенный вне функции, будет недоступен по умолчанию из-за области переменной в PHP.
– Chris Trynkiewicz
1 October 2017 в 15:14
Я бы предположительно рекомендовал использовать PDO для вашего доступа SQL.
Тогда это всего лишь случай изменения драйвера и обеспечения работы SQL на новом бэкэнд. В теории. Перенос данных - это другая проблема.
Доступ к реестру базы данных велик.
В случае больших проектов много файлов для изменения, а также если предыдущая версия проекта 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;
}
}
Если у вас много файлов для изменения в ваших проектах, вы можете создавать функции с такими же именами, как функции 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;
}
}
Вот полный учебник, как сделать все правильно и быстро. Я использовал его после обновления хостинга для моих клиентов с 5.4 (OMG !!!) до версии 7.x PHP.
Прежде всего, вам нужно поместить соединение в новую переменную $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...");
С Notepad ++ я использую «Найти в файлах» (Ctrl + Shift + f):
в в следующем порядке я выбираю «Заменить в файлах»:
, если вы получаете ошибки, возможно, потому, что ваш $ con недоступен из ваших функций.
Вам нужно добавить global $con;
во все ваши функции, например:
function my_function(...) {
global $con;
...
}
Надеюсь, это поможет.
Вы можете сделать массовый поиск и заменить с помощью notepad ++ для следующего: он работал для меня:
Найти: mysql _
Заменить: mysqli _
Найти : _query (
Заменить: _query ($ conn,
Следующие потребности меняются, но зависит от того, как вы подключаетесь ...
Обновить строку подключения в config.php:
$conn = mysqli_connect($db_host, $db_username, $db_password, $db_name) or die("Unable to Connect");
Надеюсь, это поможет.
(я понимаю, что это старо, но оно все еще появляется ...)
Если вы замените mysql_*
на mysqli_*
, имейте в виду, что вся загрузка функций mysqli_*
необходимо передать ссылку на базу данных.
Например:
mysql_query($query)
становится
mysqli_query($link, $query)
Т.е. требуется большая проверка.
Короткая версия преобразования 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
mysqli_*
имеют первые два параметра. Старый стиль былmysql_*(q, link, ...)
, а новый стиль -mysqli_*(link, q, ...)
. – Mikko Rantalainen 16 December 2015 в 08:26