2009-09-07 26 views
35

Basado en este código a continuación, utilizo para mysql regular, ¿cómo podría convertirlo para usar mysqli?¿Cómo cambiar mysql a 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; 
} 
?> 

Respuesta

59

Lo primero que debe hacer es reemplazar cada llamada a 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 sencilla, teniendo en cuenta que ya tiene algún código en la API de MySQL, que es de procedimiento.

Para ayudar con eso, el The MySQLi Extension Function Summary es definitivamente algo que demostrará ser útil.

Por ejemplo:

Tenga en cuenta que, para algunas funciones, es posible que deba verificar los parámetros con cuidado: 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; al menos para PHP < = 5,2)

Por ejemplo:

  • con MySQL, es necesario utilizar el mysql_select_db Una vez conectado, para indicar en qué base de datos que desea hacer sus consultas
  • mysqli, en el otro lado, le permite especificar ese nombre de base de datos como el cuarto parámetro a 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, trate de ejecutar la nueva versión de su guión ... Y comprobar si todo funciona; si no ... Es hora de buscar errores ;-)

+0

Mientras desee conservar el código de procedimiento, cambiar de mysql a mysqli no debería ser demasiado difícil; pero, si su base de código no es demasiado grande (es decir, pasar de una API a otra no significa demasiado trabajo), es posible que desee utilizar una API orientada a objetos; Sin embargo, requerirá más trabajo ... Y si va por una reescritura total a una OO-API, iría con PDO en lugar de mysqli ... –

+0

Quiero decir leer todo el día en el 2, de qué Entiendo que no es la principal diferencia con PDO, que PDO le permite usar un sistema DB diferente. SI ese es el único beneficio, entonces no sería de mucha ayuda en mi caso ya que nunca necesitaré uno diferente para esta aplicación. – JasonDavis

+0

En este caso, mysqli probablemente estará bien :-) especialmente porque ya tiene un código creado en mysql. –

3

recomendaría tentativamente usando PDO para su acceso SQL.

Luego solo se trata de cambiar el controlador y asegurarse de que SQL funcione en el nuevo servidor. En teoria. La migración de datos es un problema diferente.

El acceso abstracto a la base de datos es excelente.

25

(Me doy cuenta de que esto es viejo, pero sigue apareciendo ...)

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.

ej .:

mysql_query($query) 

convierte

mysqli_query($link, $query) 

es decir, una gran cantidad de controles que deben efectuarse.

0

Corto versión de MySQL convertir 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 
6

La forma más sencilla que siempre ocupe de esto

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

3 pasos de reemplazo en el siguiente orden

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

Esto funciona para mí cada vez

+0

Añadiría buscar todas las cadenas 'function' y colocar' global $ con; 'sobre el contenido de la función, ya que' $ con' definido fuera de la función no será disponible por defecto debido al alcance de la variable en PHP. –

1

Si usted tiene unos archivos mucho que cambiar en sus proyectos puede crear funciones con los mismos nombres como funciones de MySQL, y en las funciones hacen que el convertido al igual que 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; 
     } 
} 
0

en caso de grandes proyectos, muchos archivos para cambiar y también si la versión anterior proyecto de PHP fue de 5.6 y el nuevo es 7.1, puede crear un nuevo archivo de sql.php y lo incluye en el encabezado o en algún lugar donde lo use todo el tiempo y necesite 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; 
    } 
} 
+0

y ¿cómo debo usar esto para probar con las funciones de mysqli? Por ejemplo, su archivo comprueba primero si sale mysql_query, de ser así, utilice 5.6, pero ¿cómo funciona si funciona mysqli_query? – alex

+0

¿Cómo puedo explict probar mysqli_query (???, $ q); – alex

+0

y úsala:

 $id_cat = (int)'4'; $sql = "DELETE FROM categories WHERE id='$id_cat' OR parent_id ='$id_cat'"; mysql_query($sql) or die('Error SQL !
'.$sql.'
'.mysql_error());
Svetoslav