utf8 mysqli_set_charset mysqli_select_db mysqli_result mysqli_query mysql_result mysql_query ejemplo php mysql mysqli

php - mysqli_set_charset - ¿Cómo cambiar mysql a mysqli?



mysqli_select_db (9)

Basado en este código a continuación, utilizo para mysql regular, ¿cómo podría convertirlo para usar mysqli?

¿Es tan simple como cambiar ** mysql _query ($ sql) ; a 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; } ?>


(Me doy cuenta de que esto es viejo, pero aún aparece ...)

Si reemplaza mysql_* con mysqli_* , tenga en cuenta que toda una carga de funciones mysqli_* necesita que se pase el enlace de la base de datos.

P.ej:

mysql_query($query)

se convierte

mysqli_query($link, $query)

Es decir, se requieren muchas comprobaciones.


Aquí hay un tutorial completo sobre cómo hacerlo bien y rápido. Lo utilicé después de actualizar el alojamiento para mis clientes desde 5.4 (OMG !!!) hasta 7.x versión PHP.

1. Definición de conexión

Antes que nada, debes poner la conexión a una nueva variable $link o $con , o lo que quieras.

Ejemplo

Cambiar la conexión desde:

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

o

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

a:

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

2. mysql_ * modificación

Con Notepad ++ utilizo "Buscar en archivos" (Ctrl + Shift + f):

en el siguiente orden elijo "Reemplazar en archivos":

  1. mysql_query (-> mysqli_query ($ con,

  2. mysql_error () -> mysqli_error ($ con)

  3. mysql_close () -> mysqli_close ($ con)

  4. mysql_ -> mysqli_

3. ajustes

si recibe errores, es posible que su $ con no sea accesible desde sus funciones.

Necesita agregar un global $con; en todas sus funciones, por ejemplo:

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

Espero eso ayude.


En el caso de proyectos grandes, muchos archivos para cambiar y también si la versión del proyecto anterior de PHP era 5.6 y la nueva es 7.1, puede crear un nuevo archivo sql.php e incluirlo en el encabezado o en algún lugar donde lo use todo el tiempo y necesita conexión sql. Por ejemplo:

//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; } }


La forma más fácil de manejar esto

Donde $ con = mysqli_connect ($ serverName, $ dbusername, $ dbpassword);

Reemplazo de 3 pasos en el siguiente orden

  1. Todos los " mysql_select_db ( " con " mysqli_select_db ($ con, "
  2. Todo " mysql_query ( " con " mysqli_query ($ con, " y
  3. Todo " mysql_ " con " mysqli_ ".

Esto funciona para mí cada vez


Lo primero que debe hacer es reemplazar cada llamada a la función mysql_* con su equivalente mysqli_* , al menos si está dispuesto a usar la API de procedimiento, que sería la manera más fácil, teniendo en cuenta que ya tiene algún código basado en el MySQL API, que es un procedimiento.

Para ayudar con eso, el resumen de la función de extensión de MySQL es definitivamente algo que demostrará ser útil.

Por ejemplo:

Tenga en cuenta que, para algunas funciones, puede que necesite verificar cuidadosamente los parámetros: quizás haya algunas diferencias aquí y allá, pero no tantas, diría: tanto mysql como mysqli están basados ​​en la misma biblioteca (libmysql; menos para PHP <= 5.2)

Por ejemplo:

  • con mysql, debes usar mysql_select_db una vez conectado, para indicar en qué base de datos quieres hacer tus consultas
  • mysqli, en el otro lado, le permite especificar ese nombre de base de datos como el cuarto parámetro para mysqli_connect .
  • Aún así, también hay una función mysqli_select_db que puede usar, si lo prefiere.


Una vez que haya terminado con eso, intente ejecutar la nueva versión de su script ... Y verifique si todo funciona; si no ... Hora de buscar insectos ;-)


Puedes hacer una búsqueda masiva y reemplazar usando Notepad ++ para lo siguiente, funcionó para mí:

Encontrar: mysql_

Reemplazar: mysqli_

Buscar: _query (

Reemplazar: _query ($ conn,

Las siguientes necesidades cambian pero depende de cómo se conecta ...

Actualice la cadena de conexión en config.php a lo siguiente:

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

Espero que esto ayude.


Si tiene muchos archivos para cambiar en sus proyectos, puede crear funciones con los mismos nombres, como las funciones de mysql, y en las funciones hacer la conversión como este código:

$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; } }


Tentativamente recomendaría usar PDO para su acceso SQL.

Luego, solo se trata de cambiar el controlador y garantizar que el SQL funcione en el nuevo back-end. En teoria. La migración de datos es un problema diferente.

El acceso abstracto a la base de datos es excelente.


Versión corta de la conversión de mysql a 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