sql >> Databáze >  >> RDS >> Mysql

Mohu slepě nahradit všechny funkce mysql_ funkcí mysqli_?

Krátká odpověď je ne , funkce nejsou ekvivalentní.

Dobrou zprávou je, že existuje nástroj pro převod, který vám pomůže, pokud máte mnoho hovorů/projektů ke změně. To umožní, aby vaše skripty fungovaly okamžitě.

https://github.com/philip/MySQLConverterTool

Je to rozvětvená verze původní verze Oracle a je košer.

To znamená, že není příliš obtížné aktualizovat váš kód a možná budete chtít migrovat na objektově orientovanou metodologii ...

1) Připojení

Pro všechny záměry a účely potřebujete novou funkci připojení, která připojení uloží například jako proměnnou PHP;

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

Všimněte si, že jsem uložil připojení do $mysqli . Můžete uložit do $db nebo cokoli chcete, ale měli byste to použít v celém kódu, abyste odkazovali na připojení.

Před otevřením připojení nezapomeňte povolit hlášení chyb pro mysqli;

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

2) Dotaz

Poznámka:Před SQL injection byste se měli chránit připravenými příkazy, které jsou dostupné v MySQLi. Podívejte se na Jak mohu zabránit vkládání SQL v PHP? , ale zde popíšu jen základy.

Nyní musíte do dotazu zahrnout připojení jako argument a další mysqli_ funkcí. V procedurálním kódu je to první argument, v OO jej zapisujete jako metodu třídy.

Postup:

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

OO:

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

3) Načíst výsledek

Načítání výsledku je podobné starému mysql_ funkce v procedurálním;

while ($row = mysqli_fetch_assoc($result))

ale jako $result je nyní objekt v mysqli, můžete použít volání funkce object;

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

4) Zavřít připojení

Takže jako dříve musíte zahrnout spojení do funkce close; jako argument v procesu;

mysqli_close($mysqli);

a jako objekt, na kterém spustíte funkci v OO;

$mysqli->close();

Byl bych tu navždy, kdybych je všechny prošel, ale chápete. Podívejte se na dokumentaci Pro více informací. Nezapomeňte převést jakékoli funkce uzavření připojení, uvolnění výsledku nebo chyb a počítání řádků.

Základním pravidlem je, že pro funkce, které využívají připojení k databázi, jej musíte zahrnout do funkce nyní (buď jako první argument v procedurální nebo jako objekt, který používáte k volání funkce v OO), nebo pro sadu výsledků stačí změnit funkci na mysqli_ nebo použijte výslednou sadu jako objekt.



  1. Jak vytvořit funkci SQL Server pro spojení více řádků z poddotazu do jednoho odděleného pole?

  2. Mysql počítá instance podřetězce a poté seřaďte podle

  3. MySQL serveru dochází paměť nebo se nespustí

  4. Na co Hibernate mapuje booleovský datový typ při výchozím použití databáze Oracle?