sql >> Databasteknik >  >> RDS >> Mysql

Kan jag blint ersätta alla mysql_-funktioner med mysqli_?

Det korta svaret är nej , funktionerna är inte likvärdiga.

Den goda nyheten är att det finns ett konverteringsverktyg som hjälper dig om du har många samtal/projekt att ändra. Detta gör att dina skript fungerar direkt.

https://github.com/philip/MySQLConverterTool

Det är en kluven version av Oracles originalversion, och den är kosher.

Som sagt, det är inte så svårt att uppdatera din kod, och du kanske vill migrera till en objektorienterad metod ändå...

1) Anslutningen

Du behöver för all del en ny anslutningsfunktion som sparar anslutningen som en PHP-variabel, till exempel;

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

Observera att jag har sparat anslutningen till $mysqli . Du kan spara till $db eller vad du vill, men du bör använda detta genom hela din kod för att referera till anslutningen.

Kom ihåg att aktivera felrapportering för mysqli innan du öppnar anslutningen;

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

2) Frågan

Obs:Du bör skydda mot SQL-injektion med förberedda satser, som är tillgängliga i MySQLi. Ta en titt på Hur kan jag förhindra SQL-injektion i PHP? , men jag ska bara täcka grunderna här.

Du måste nu inkludera anslutningen som ett argument i din fråga och andra mysqli_ funktioner. I procedurkod är det det första argumentet, i OO skriver du det som en klassmetod.

Procedur:

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

OO:

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

3) Hämta resultat

Hämtningen av resultatet liknar den gamla mysql_ funktion i procedur;

while ($row = mysqli_fetch_assoc($result))

men som $result är nu ett objekt i mysqli, kan du använda objektfunktionen call;

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

4) Stäng anslutning

Så som tidigare måste du inkludera anslutningen i stängningsfunktionen; som ett argument i förfarandet;

mysqli_close($mysqli);

och som objektet som du kör funktionen på i OO;

$mysqli->close();

Jag skulle vara här för alltid om jag gick igenom dem alla, men ni fattar. Ta en titt på dokumentationen för mer information. Glöm inte att konvertera eventuella anslutningsstängningar, resultatsläpp eller fel- och radräkningsfunktioner du har.

Den grundläggande tumregeln är för funktioner som använder databasanslutningen, du måste inkludera den i funktionen nu (antingen som det första argumentet i procedur, eller objektet du använder för att anropa funktionen i OO), eller för en resultatuppsättning du kan bara ändra funktionen till mysqli_ eller använd resultatuppsättningen som objekt.



  1. Vad är NoSQL och hur används det?

  2. Hur kan en LEFT OUTER JOIN returnera fler poster än vad som finns i den vänstra tabellen?

  3. FIND_IN_SET() vs IN()

  4. Beräkna ålder baserat på födelsedatum