Come modificare mysql a mysqli?

Base di questo codice sottostante che uso per regolare mysql, come potrei convertire usare mysqli?

È semplice come cambiare **mysql _query($sql); per 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;
}
?>
InformationsquelleAutor JasonDavis | 2009-09-07



9 Replies
  1. 68

    La prima cosa da fare sarebbe probabilmente sostituire ogni mysql_* funzione di chiamata con il suo equivalente mysqli_*, almeno se si è disposti a utilizzare il procedurali API-che sarebbe la via più facile, considerando che già hanno un codice, basato sulle API di MySQL, che è un procedurale.

    Per aiutare con questo, la L’Estensione MySQLi Funzione Di Riepilogo è sicuramente qualcosa che sarà utile.

    Per esempio:

    Nota: Per alcune funzioni, potrebbe essere necessario controllare i parametri con attenzione: Forse ci sono alcune differenze qua e là, ma non che molti, direi: mysql e mysqli sono basati sulla stessa libreria (libmysql ; almeno per PHP <= 5.2)

    Per esempio:

    • con mysql, è necessario utilizzare il mysql_select_db una volta connesso, per indicare che i database che si desidera fare la tua query
    • mysqli, dall’altro lato, consente di specificare che il nome del database come quarto parametro per mysqli_connect.
    • Ancora, c’è anche un mysqli_select_db funzione che è possibile utilizzare, se si preferisce.


    Una volta che hai finito con questo, provare a eseguire la nuova versione dello script… E verificare se tutto funziona ; se non… il Tempo per la caccia di bug 😉

    • Come lungo come si desidera mantenere il codice procedurale, il passaggio da mysql a mysqli non dovrebbe essere troppo difficile ; ma, se il codice non è troppo grande (ie, passando da una API per gli altri non significa troppo lavoro), si potrebbe desiderare di utilizzare un object-oriented API, ma richiede più lavoro, anche se… E se andando per un totale di riscrittura di un OO-API, mi piacerebbe andare con DOP invece di mysqli…
    • Voglio dire, a leggere su l’2 tutto il giorno, ora, da quello che ho capito non è la principale differenza con il DOP, che DOP consente di utilizzare un differente sistema DB. SE questo è l’unico vantaggio, allora non sarebbe molto d’aiuto per il mio caso in quanto non ho mai bisogno di un altro per questa applicazione.
    • In questo caso, mysqli, probabilmente saranno proprio bene 🙂 soprattutto come hai già un po ‘ di codice costruito su mysql.
    • Ci sono strumenti per automatizzare il processo di migrazione, come: github.com/philip/MySQLConverterTool
    • Nota che alcuni mysqli_* procedurali funzioni primi due parametri passati. Vecchio stile era mysql_*(q, link, ...) e nuovo stile è mysqli_*(link, q, ...).
    • Inviato altro il tuo modo di oggi. stackoverflow.com/q/34438381 😉
    • C’è un ottimo articolo più dettagliato su come fare la conversione (2015+) phpclasses.org/blog/package/9199/post/…

  2. 30

    (Mi rendo conto che non è vecchio, ma è ancora in piedi…)

    Se fai sostituire mysql_* con mysqli_* poi tenere a mente che un intero carico di mysqli_* funzioni è necessario il collegamento al database per essere passato.

    E. g.:

    mysql_query($query)

    diventa

    mysqli_query($link, $query)

    I. e., un sacco di controllo richiesto.

  3. 14

    Il modo più semplice che ho sempre gestire questa Dove

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

    3 procedura di sostituzione nel seguente ordine

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

    Questo funziona per me, ogni volta che

    • Mi piacerebbe aggiungere la ricerca di tutti i function stringhe e mettendo un global $con; in cima alla funzione del contenuto, come $con definito al di fuori della funzione non sarà disponibile per impostazione predefinita, grazie per la variabile del campo di applicazione in PHP.
    • Non è una risposta perfetta — alcune funzioni ancora bisogno di aggiungere la con $parametro (es. mysqi_affected_rows, mysqi_real_escape_string) — ma molto utile, perché riassume i cambiamenti necessari.
  4. 6

    Vorrei provvisoriamente consiglia di utilizzare DOP per SQL access.

    Allora è solo un caso di cambiare il driver e garantire SQL lavori per il nuovo backend. In teoria. La migrazione dei dati è un problema diverso.

    Abstract accesso al database è grande.

  5. 3

    In caso di progetti di grandi dimensioni, numero di file da modificare e anche se il progetto precedente versione di PHP 5.6 e il nuovo è 7.1, è possibile creare un nuovo file sql.php e includere nell’intestazione o da qualche parte si utilizza tutto il tempo e le esigenze di connessione sql. Per 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;
        }
    }
    • e come dovrei usare questo test con mysqli funzioni?? Per esempio Il file controlla prima se mysql_query esce se è così utilizzare per la 5.6 ma come fare per verificare se mysqli_query funziona?
    • Come posso explict test mysqli_query(???, $q);
    • e l’uso di esso: <pre> $id_cat = (int)’4′; $sql = “DELETE FROM categorie WHERE id=’$id_cat’ O parent_id =’$id_cat'”; mysql_query($sql) or die(‘Errore SQL !<br />’.$sql.'<br />’.mysql_error()); </pre>
  6. 2

    Se avete un sacco di file per cambiare i tuoi progetti è possibile creare funzioni con lo stesso nome come funzioni di mysql,
    e in funzioni di conversione 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;
           }
    }
  7. 2

    Ecco un tutorial su come fare bene e in fretta.
    Io l’ho usato dopo l’aggiornamento di hosting per i miei clienti da 5.4 (OMG!!!) 7.x versione di PHP.

    1. Definizione della connessione

    Prima di tutto, è necessario mettere la connessione a una nuova variabile $link o $con, o quello che si vuole.

    Esempio

    Cambiare la connessione da :

    @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_* modifica

    Con Notepad++ io uso il “cerca nei file” (Ctrl + Shift + f) :

    Come modificare mysql a mysqli?

    nel seguente ordine ho scelto “Sostituisci nei File” :

    1. mysql_query( -> mysqli_query($con,

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

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

    4. mysql_ -> mysqli_

    3. rettifiche

    se è possibile ottenere gli errori è forse perché la vostra con $non è accessibile dalle vostre funzioni.

    È necessario aggiungere un global $con; in tutte le funzioni, per esempio :

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

    Speranza che aiuta.

  8. 0

    Breve Versione della conversione di 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
  9. -1

    Si può fare una messa trovare e sostituire usando notepad++ per i seguenti, ha funzionato per me:

    Trovare: mysql_

    Sostituire: mysqli_

    Trovare: _query(

    Sostituire: _query($conn,

    Necessità di cambiare, ma dipende da come si esegue la connessione…

    Aggiornamento stringa di connessione in config.php seguenti:

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

    Spero che questo aiuta.

Lascia un commento