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

Jak převedu skript pomocí funkcí mysql_ na použití funkcí mysqli_?

Poznámka: Převod z mysql_ na mysqli_ nemusí být optimální. Zvažte CHOP pokud jste připraveni převést celý svůj kód na OOP .

Může být lákavé pokusit se nahradit všechny instance mysql_ pomocí mysqli_ a modlete se, aby to fungovalo. Byli byste blízko, ale ne úplně na místě.

Připojování k databázi:

Naštěstí mysqli_connect funguje dostatečně blízko k mysql_query že můžete jednoduše vyměnit názvy jejich funkcí.

mysql_:

$con = mysql_connect($host, $username, $password);

mysqli_:

$con = mysqli_connect($host, $username, $password);

Výběr databáze

Nyní s většinou ostatních funkcí v mysqli_ knihovny, budete muset předat mysqli_select_db připojení k databázi jako jeho první parametr. Většina mysqli_ funkce vyžadují nejprve objekt připojení.

U této funkce stačí přepnout pořadí argumentů, které funkci předáte. Pokud jste mu dříve nepředali objekt připojení, musíte jej nyní přidat jako první parametr.

mysql_:

mysql_select_db($dbname, $con);

mysqli_:

mysqli_select_db($con, $dbname);

Jako bonus můžete také předat název databáze jako čtvrtý parametr do mysqli_connect - vynechání potřeby volání mysqli_select_db .

$con = mysqli_connect($host, $username, $password, $dbname);

Vyčištění uživatelského vstupu

Pomocí mysqli_real_escape_string je velmi podobný mysql_real_escape_string . Stačí předat objekt připojení jako první parametr.

mysql_:

$value1 = mysql_real_escape_string($input_string);

mysqli_:

$value1 = mysqli_real_escape_string($con, $input_string);

Velmi důležité:Příprava a spuštění dotazu

Jedním z důvodů je mysql_ funkce byly zastaralé zpočátku byla jejich neschopnost zpracovat připravené příkazy. Pokud jednoduše převedete svůj kód na mysqli_ aniž byste udělali tento důležitý krok, budete vystaveni některým z největších slabin mysql_ funkcí.

Stojí za to si přečíst tyto články o připravených výpisech a jejich výhodách:

Wikipedie – připravená prohlášení

PHP.net – připravená prohlášení MySQLi

Poznámka:Při použití připravených příkazů je lepší explicitně uvést každý sloupec, který se pokoušíte dotazovat, než používat * zápis pro dotaz na všechny sloupce. Tímto způsobem můžete zajistit, že jste započítali všechny sloupce ve volání mysqli_stmt_bind_result .

mysql_:

$query = 'SELECT * FROM table1 WHERE table1.col1=' . $value1 . '';
$result = mysql_query($query, $con);
while($row = mysql_fetch_assoc*$result)
{
    $col1 = $row['col1'];
    $col2 = $row['col2'];

    echo $col1 . ' ' . $col2 . '<br />';
}

mysqli_:

$query = 'SELECT col1,col2 FROM table1 WHERE table1.col1=?';
if ($stmt = mysqli_prepare($link, $query)) {

    /* pass parameters to query */
    mysqli_stmt_bind_param($stmt, "s", $value1);

    /* run the query on the database */
    mysqli_stmt_execute($stmt);

    /* assign variable for each column to store results in */
    mysqli_stmt_bind_result($stmt, $col1, $col2);

    /* fetch values */
    while (mysqli_stmt_fetch($stmt)) {
        /*
            on each fetch, the values for each column 
            in the results are automatically stored in 
            the variables we assigned using 
            "mysqli_stmt_bind_result"
        */
        echo $col1 . ' ' . $col2 . '<br />';
    }

    /* close statement */
    mysqli_stmt_close($stmt);
}

Zobrazují se chyby

Zobrazování chyb funguje trochu jinak s mysqli_ . mysqli_error vyžaduje objekt připojení jako svůj první parametr. Ale co když se spojení nezdařilo? mysqli_ zavádí malou sadu funkcí, které nevyžadují objekt připojení:mysqli_connect_* funkce.

mysql_:

if (!$con) {
    die('Could not connect: ' . mysql_error());
}

if (!$result) {
    die('SQL Error: ' . mysql_error());
}

mysqli_:

/* check connection error*/
if (mysqli_connect_errno()) {
    die( 'Could not connect: ' . mysqli_connect_error() );
}

/* check query error */
if ($stmt = mysqli_prepare($link, $query)) {

    // ... execute query

    if (mysqli_stmt_error($stmt)) {
        echo 'SQL Error: ' . mysqli_stmt_error($stmt);
    }
}


  1. Jak funguje funkce Strftime() v SQLite

  2. Oracle Trigger ORA-04098:Trigger je neplatný a opětovné ověření se nezdařilo

  3. Laravel 5:Porušení omezení integrity:1452 Nelze přidat nebo aktualizovat podřízený řádek:omezení cizího klíče selže

  4. MySQL:SUM() s JOIN vrací nesprávné hodnoty