2009-09-07 3 views
35

Sulla base di questo codice che uso per regolare mysql, come posso convertirlo per usare mysqli?Come cambiare mysql in mysqli?

È semplice come cambiare ** 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; 
} 
?> 

risposta

59

La prima cosa da fare sarebbe probabilmente quella di sostituire ogni chiamata di funzione mysql_* con il suo equivalente mysqli_*, almeno se si è disposti a utilizzare l'API procedurale - che sarebbe il modo più semplice, considerando che si dispone già di un codice basato sull'API MySQL, che è procedurale.

Per aiutare con questo, il The MySQLi Extension Function Summary è sicuramente qualcosa che si rivelerà utile.

Ad esempio:

Si noti che, per alcune funzioni, potrebbe essere necessario controllare i parametri attentamente: Forse ci sono alcune differenze qua e là - ma non così tante, direi: sia mysql che mysqli si basano sulla stessa libreria (libmysql; almeno per PHP < = 5,2)

Per esempio:

  • con MySQL, è necessario utilizzare il mysql_select_db Una volta connesso, di indicare su quale database che si vuole fare le vostre domande
  • mysqli, dall'altra parte, consente di specificare il nome del database come quarto parametro su mysqli_connect.
  • Tuttavia, c'è anche una funzione mysqli_select_db che è possibile utilizzare, se si preferisce.


volta che hai finito con questo, provare ad eseguire la nuova versione dello script ... E controllare se tutto funziona; se no ... Tempo per la caccia agli insetti ;-)

+0

Finché si desidera mantenere codice procedurale, passare da mysql a mysqli non dovrebbe essere troppo difficile; ma, se il tuo codebase non è troppo grande (cioè passare da una API all'altra non significa troppo lavoro), potresti voler usare un'API orientata agli oggetti; richiederà più lavoro, anche se ... E se dovessi effettuare una riscrittura totale su una OO-API, andrei con PDO invece di mysqli ... –

+0

Voglio dire leggendo su 2 tutto il giorno ora, da cosa Capisco non è la differenza principale con PDO, che PDO consente di utilizzare un sistema DB differnt. Se questo è l'unico vantaggio, non sarebbe di grande aiuto nel mio caso in quanto non avrò mai bisogno di uno diverso per questa applicazione. – JasonDavis

+0

In questo caso, mysqli probabilmente andrà bene :-), specialmente perché hai già un codice costruito su mysql. –

3

avrei provvisoriamente consiglia di utilizzare PDO per l'accesso SQL.

Quindi è solo un caso di cambiare il driver e assicurarsi che SQL funzioni sul nuovo back-end. In teoria. La migrazione dei dati è un problema diverso.

L'accesso astratto al database è eccezionale.

25

(mi rendo conto che questo è vecchio, ma si presenta ancora ...)

Se si sostituisce mysql_* con mysqli_*, tenere presente che un intero carico delle funzioni mysqli_* richiede il passaggio del collegamento del database.

Es .:

mysql_query($query) 

diventa

mysqli_query($link, $query) 

cioè un sacco di controlli da effettuare.

0

versione corta del mysql conversione in 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

Il modo più semplice che sempre ne occupi

Dove $ con = mysqli_connect ($ serverName, $ nomeutentedb, $ passworddb);

3 sostituzione passaggi nel seguente ordine

  1. All "mysql_select_db (" con "mysqli_select_db ($ con,"
  2. All "mysql_query (" con "mysqli_query ($ con, "e
  3. Tutti" mysql_ "con" mysqli_ ".

questo funziona per me ogni

+0

Aggiungerei cercare tutte le stringhe 'function' e inserire un' global $ con; 'in cima al contenuto della funzione, poiché' $ con' definito al di fuori della funzione non sarà disponibile per impostazione predefinita a causa dell'ambito della variabile in PHP. –

1

Se avete un file molto per cambiare nei vostri progetti è possibile creare funzioni con gli stessi nomi come funzioni di MySQL, e nelle funzioni rendono il convertito come questo codice:

$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

in caso di grandi progetti, molti file di cambiare e anche se la versione precedente progetto di PHP è stato 5.6 e il nuovo è 7.1, è possibile creare un nuovo file di sql.php e comprendono nell'intestazione o da qualche parte si usa tutto il tempo e ha bisogno di connessione SQL. Ad esempio:

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

e come dovrei usarlo per testare le funzioni di mysqli ?? Ad esempio, il tuo file controlla prima se mysql_query termina se lo si utilizza per 5.6 ma come verificare se mysqli_query funziona? – alex

+0

Come posso esplicitare test mysqli_query (???, $ q); – alex

+0

e usalo:

 $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