sql >> Database >  >> RDS >> Mysql

Kan ik blindelings alle mysql_-functies vervangen door mysqli_?

Het korte antwoord is nee , de functies zijn niet equivalent.

Het goede nieuws is dat er een conversietool is die u zal helpen als u veel oproepen/projecten moet wijzigen. Hierdoor kunnen uw scripts meteen werken.

https://github.com/philip/MySQLConverterTool

Het is een gevorkte versie van de originele versie van Oracle, en het is koosjer.

Dat gezegd hebbende, het is niet zo moeilijk om je code bij te werken, en misschien wil je toch migreren naar een objectgeoriënteerde methode ...

1) De verbinding

In alle opzichten heb je een nieuwe verbindingsfunctie nodig die de verbinding opslaat als een PHP-variabele, bijvoorbeeld;

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

Merk op dat ik de verbinding met $mysqli . heb opgeslagen . U kunt opslaan in $db of wat je maar wilt, maar je moet dit in je hele code gebruiken om naar de verbinding te verwijzen.

Vergeet niet om foutrapportage voor mysqli in te schakelen voordat u de verbinding opent;

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

2) De zoekopdracht

Opmerking:je moet beschermen tegen SQL-injectie met voorbereide instructies, die beschikbaar zijn in MySQLi. Bekijk Hoe kan ik SQL-injectie in PHP voorkomen? , maar ik ga hier alleen de basis behandelen.

Je moet nu de verbinding als argument in je query opnemen, en andere mysqli_ functies. In procedurele code is dit het eerste argument, in OO schrijf je het als een klassenmethode.

Procedureel:

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

OO:

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

3) Resultaat ophalen

Het ophalen van het resultaat is vergelijkbaar met de oude mysql_ procedureel functioneren;

while ($row = mysqli_fetch_assoc($result))

maar als $result is nu een object in mysqli, u kunt de objectfunctie-aanroep gebruiken;

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

4) Sluit verbinding

Dus zoals eerder moet je de verbinding opnemen in de sluitfunctie; als een procedureel argument;

mysqli_close($mysqli);

en als het object waarop u de functie uitvoert in OO;

$mysqli->close();

Ik zou hier voor altijd zijn als ik ze allemaal zou doornemen, maar je snapt het idee. Bekijk de documentatie voor meer informatie. Vergeet niet alle functies voor het sluiten van verbindingen, het vrijgeven van resultaten of het tellen van fouten en rijen die u heeft, te converteren.

De vuistregel is dat voor functies die de databaseverbinding gebruiken, u deze nu in de functie moet opnemen (ofwel als het eerste argument in procedureel, of het object dat u gebruikt om de functie aan te roepen in OO), of voor een resultatenset je kunt de functie gewoon veranderen in mysqli_ of gebruik de resultatenset als het object.



  1. Hoe controleer ik het maximum aantal toegestane verbindingen met een Oracle-database?

  2. SUM() Functie in MySQL

  3. Hoe maak je een veilige mysql voorbereide verklaring in php?

  4. De naam van een MySQL-database wijzigen