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

Posso sostituire ciecamente tutte le funzioni mysql_ con mysqli_?

La risposta breve è no , le funzioni non sono equivalenti.

La buona notizia è che c'è uno strumento di conversione che ti aiuterà se hai molte chiamate/progetti da cambiare. Ciò consentirà ai tuoi script di funzionare immediatamente.

https://github.com/philip/MySQLConverterTool

È una versione biforcuta della versione originale di Oracle ed è kosher.

Detto questo, non è troppo difficile aggiornare il codice e potresti comunque voler migrare a una metodologia orientata agli oggetti ...

1) La connessione

A tutti gli effetti, è necessaria una nuova funzione di connessione che salvi la connessione come una variabile PHP, ad esempio;

$mysqli = new mysqli($host, $username, $password, $database);

Nota che ho salvato la connessione a $mysqli . Puoi salvare in $db o qualunque cosa tu voglia, ma dovresti usarlo in tutto il codice per fare riferimento alla connessione.

Ricordarsi di abilitare la segnalazione degli errori per mysqli prima di aprire la connessione;

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

2) La domanda

Nota:dovresti proteggerti dall'iniezione SQL con istruzioni preparate, disponibili in MySQLi. Dai un'occhiata a Come posso prevenire l'SQL injection in PHP? , ma qui tratterò solo le nozioni di base.

Ora devi includere la connessione come argomento nella tua query e altri mysqli_ funzioni. Nel codice procedurale è il primo argomento, in OO lo scrivi come un metodo di classe.

Procedurale:

$result = mysqli_query($mysqli, $sql);

OO:

$result = $mysqli->query($sql);

3) Recupera il risultato

Il recupero del risultato è simile al vecchio mysql_ funzione in procedurale;

while ($row = mysqli_fetch_assoc($result))

ma come $result è ora un oggetto in mysqli, puoi usare la chiamata alla funzione oggetto;

while ($row = $result->fetch_assoc())

4) Chiudi connessione

Quindi, come prima, è necessario includere la connessione nella funzione di chiusura; come argomento in procedurale;

mysqli_close($mysqli);

e come oggetto su cui esegui la funzione in OO;

$mysqli->close();

Sarei qui per sempre se li avessi esaminati tutti, ma tu hai un'idea. Dai un'occhiata alla la documentazione per maggiori informazioni. Non dimenticare di convertire le funzioni di chiusura della connessione, rilascio dei risultati o errori e conteggio delle righe che hai.

La regola pratica di base è per le funzioni che utilizzano la connessione al database, è necessario includerla nella funzione ora (o come primo argomento in procedural o come oggetto che usi per chiamare la funzione in OO) o per un set di risultati puoi semplicemente cambiare la funzione in mysqli_ oppure usa il set di risultati come oggetto.