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

Hvordan konverterer jeg et script ved hjælp af mysql_-funktioner til at bruge mysqli_-funktioner?

Bemærk: Konvertering fra mysql_ til mysqli_ er måske ikke optimalt. Overvej BOB hvis du er parat til at konvertere al din kode til OOP .

Det kan være fristende at prøve at erstatte alle forekomster af mysql_ med mysqli_ og bed om at det virker. Du ville være tæt på, men ikke helt på punkt.

Opretter forbindelse til databasen:

Heldigvis mysqli_connect arbejder tæt nok til mysql_query at du bare kan bytte deres funktionsnavne ud.

mysql_:

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

mysqli_:

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

Valg af en database

Nu med de fleste af de andre funktioner i mysqli_ bibliotek, skal du sende mysqli_select_db databaseforbindelsen som dens første parameter. Det meste af mysqli_ funktioner kræver forbindelsesobjektet først.

For denne funktion kan du bare skifte rækkefølgen af ​​de argumenter, du sender til funktionen. Hvis du ikke har givet det et forbindelsesobjekt før, skal du tilføje det som den første parameter nu.

mysql_:

mysql_select_db($dbname, $con);

mysqli_:

mysqli_select_db($con, $dbname);

Som en bonus kan du også videregive databasenavnet som den fjerde parameter til mysqli_connect - omgå behovet for at kalde mysqli_select_db .

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

Desinficer brugerinput

Brug af mysqli_real_escape_string er meget lig mysql_real_escape_string . Du skal blot sende forbindelsesobjektet som den første parameter.

mysql_:

$value1 = mysql_real_escape_string($input_string);

mysqli_:

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

Meget vigtigt:Forberedelse og kørsel af en forespørgsel

En grund til mysql_ funktioner blev forældet til at begynde med var deres manglende evne til at håndtere forberedte udsagn. Hvis du blot konverterer din kode til mysqli_ uden at tage dette vigtige skridt, er du underlagt nogle af de største svagheder ved mysql_ funktioner.

Det er værd at læse disse artikler om udarbejdede udsagn og deres fordele:

Wikipedia - Forberedte erklæringer

PHP.net - MySQLi Prepared Statements

Bemærk:Når du bruger forberedte sætninger, er det bedst at angive hver kolonne, du forsøger at forespørge på, i stedet for at bruge * notation for at forespørge alle kolonner. På denne måde kan du sikre dig, at du har taget højde for alle kolonnerne i dit opkald til 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);
}

Viser fejl

Visning af fejl fungerer lidt anderledes med mysqli_ . mysqli_error kræver forbindelsesobjektet som dets første parameter. Men hvad hvis forbindelsen mislykkedes? mysqli_ introducerer et lille sæt funktioner, der ikke kræver forbindelsesobjektet:mysqli_connect_* funktioner.

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. DATEDIFF() Eksempler i SQL Server

  2. qt5.1.1 mysql ubuntu QMYSQL-driver ikke indlæst

  3. Lær, hvordan du importerer Excel-data til en MySQL-database

  4. Hvad er forskellen mellem <> og !=operatorer i MySQL?