Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso convertire uno script usando le funzioni mysql_ per usare le funzioni mysqli_?

Nota: Conversione da mysql_ a mysqli_ potrebbe non essere ottimale. Considera DOP se sei pronto a convertire tutto il tuo codice in OOP .

Può essere allettante provare a sostituire tutte le istanze di mysql_ con mysqli_ e prega che funzioni. Saresti vicino ma non del tutto puntuale.

Collegamento al database:

Fortunatamente, mysqli_connect funziona abbastanza da mysql_query che puoi semplicemente scambiare i nomi delle loro funzioni.

mysql_:

$con = mysql_connect($host, $username, $password);

mysqli_:

$con = mysqli_connect($host, $username, $password);

Selezione di un database

Ora, con la maggior parte delle altre funzioni nel mysqli_ libreria, dovrai passare mysqli_select_db la connessione al database come la sua prima parametro. La maggior parte di mysqli_ le funzioni richiedono prima l'oggetto connessione.

Per questa funzione, puoi semplicemente cambiare l'ordine degli argomenti che passi alla funzione. Se prima non gli avevi passato un oggetto di connessione, devi aggiungerlo come primo parametro ora.

mysql_:

mysql_select_db($dbname, $con);

mysqli_:

mysqli_select_db($con, $dbname);

Come bonus, puoi anche passare il nome del database come quarto parametro a mysqli_connect - bypassando la necessità di chiamare mysqli_select_db .

$con = mysqli_connect($host, $username, $password, $dbname);

Disinfetta l'input dell'utente

Usando mysqli_real_escape_string è molto simile a mysql_real_escape_string . Devi solo passare l'oggetto di connessione come primo parametro.

mysql_:

$value1 = mysql_real_escape_string($input_string);

mysqli_:

$value1 = mysqli_real_escape_string($con, $input_string);

Molto importante:preparazione ed esecuzione di una query

Uno dei motivi è mysql_ all'inizio le funzioni erano deprecate per la loro incapacità di gestire le dichiarazioni preparate. Se converti semplicemente il tuo codice in mysqli_ senza fare questo passo importante, sei soggetto ad alcuni dei maggiori punti deboli di mysql_ funzioni.

Vale la pena leggere questi articoli sulle dichiarazioni preparate e sui loro vantaggi:

Wikipedia - Dichiarazioni preparate

PHP.net - Dichiarazioni preparate MySQLi

Nota:quando si utilizzano istruzioni preparate, è meglio elencare in modo esplicito ogni colonna che si sta tentando di interrogare, piuttosto che utilizzare il * notazione per interrogare tutte le colonne. In questo modo puoi assicurarti di aver tenuto conto di tutte le colonne nella tua chiamata a mysqli_stmt_bind_result .

mysql_:

$query = 'SELECT * FROM table1 WHERE table1.col1=' . $value1 . '';
$result = mysql_query($query, $con);
while($row = mysql_fetch_assoc*$result)
{
    $col1 = $row['col1'];
    $col2 = $row['col2'];

    echo $col1 . ' ' . $col2 . '<br />';
}

mysqli_:

$query = 'SELECT col1,col2 FROM table1 WHERE table1.col1=?';
if ($stmt = mysqli_prepare($link, $query)) {

    /* pass parameters to query */
    mysqli_stmt_bind_param($stmt, "s", $value1);

    /* run the query on the database */
    mysqli_stmt_execute($stmt);

    /* assign variable for each column to store results in */
    mysqli_stmt_bind_result($stmt, $col1, $col2);

    /* fetch values */
    while (mysqli_stmt_fetch($stmt)) {
        /*
            on each fetch, the values for each column 
            in the results are automatically stored in 
            the variables we assigned using 
            "mysqli_stmt_bind_result"
        */
        echo $col1 . ' ' . $col2 . '<br />';
    }

    /* close statement */
    mysqli_stmt_close($stmt);
}

Visualizzazione degli errori

La visualizzazione degli errori funziona in modo leggermente diverso con mysqli_ . mysqli_error richiede l'oggetto connessione come primo parametro. Ma cosa succede se la connessione fallisce? mysqli_ introduce un piccolo insieme di funzioni che non richiedono l'oggetto connessione:il mysqli_connect_* funzioni.

mysql_:

if (!$con) {
    die('Could not connect: ' . mysql_error());
}

if (!$result) {
    die('SQL Error: ' . mysql_error());
}

mysqli_:

/* check connection error*/
if (mysqli_connect_errno()) {
    die( 'Could not connect: ' . mysqli_connect_error() );
}

/* check query error */
if ($stmt = mysqli_prepare($link, $query)) {

    // ... execute query

    if (mysqli_stmt_error($stmt)) {
        echo 'SQL Error: ' . mysqli_stmt_error($stmt);
    }
}