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

Kan jeg blindt erstatte alle mysql_-funktioner med mysqli_?

Det korte svar er nej , funktionerne er ikke ækvivalente.

Den gode nyhed er, at der er et konverterværktøj, der vil hjælpe dig, hvis du har mange opkald/projekter, der skal ændres. Dette vil tillade dine scripts at arbejde med det samme.

https://github.com/philip/MySQLConverterTool

Det er en splittet version af Oracles originale version, og den er kosher.

Når det er sagt, er det ikke for svært at opdatere din kode, og du vil måske alligevel migrere til en objektorienteret metode...

1) Forbindelsen

For alt i verden har du brug for en ny forbindelsesfunktion, der f.eks. gemmer forbindelsen som en PHP-variabel;

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

Bemærk, at jeg har gemt forbindelsen til $mysqli . Du kan gemme i $db eller hvad du nu kan lide, men du bør bruge dette i hele din kode til at referere til forbindelsen.

Husk at aktivere fejlrapportering for mysqli før du åbner forbindelsen;

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

2) Forespørgslen

Bemærk:Du bør beskytte mod SQL-injektion med forberedte sætninger, som er tilgængelige i MySQLi. Tag et kig på Hvordan kan jeg forhindre SQL-injektion i PHP? , men jeg vil lige dække det grundlæggende her.

Du skal nu inkludere forbindelsen som et argument i din forespørgsel og andre mysqli_ funktioner. I procedurekode er det det første argument, i OO skriver du det som en klassemetode.

Procedure:

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

OO:

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

3) Hent resultat

Hentning af resultatet ligner den gamle mysql_ funktion i proceduren;

while ($row = mysqli_fetch_assoc($result))

men som $result er nu et objekt i mysqli, kan du bruge objektfunktionen kaldet;

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

4) Luk forbindelsen

Så som før skal du inkludere forbindelsen i lukkefunktionen; som et argument i proceduren;

mysqli_close($mysqli);

og som det objekt, du kører funktionen på i OO;

$mysqli->close();

Jeg ville være her for evigt, hvis jeg gik dem alle igennem, men du forstår. Tag et kig på dokumentationen for mere information. Glem ikke at konvertere enhver forbindelseslukning, resultatfrigivelse eller fejl- og rækketællingsfunktioner, du har.

Den grundlæggende tommelfingerregel er for funktioner, der bruger databaseforbindelsen, du skal inkludere den i funktionen nu (enten som det første argument i proceduren eller det objekt, du bruger til at kalde funktionen i OO), eller for et resultatsæt du kan bare ændre funktionen til mysqli_ eller brug resultatsættet som objektet.



  1. Konverter float til varchar i SQL Server uden videnskabelig notation

  2. Sådan undslipper du enkelte citater i MySQL

  3. Hvad er makroer, og hvordan bruger jeg dem?

  4. MariaDB JSON_TYPE() Forklaret