sql >> Database >  >> RDS >> Mysql

Hoe converteer ik een script met mysql_-functies om mysqli_-functies te gebruiken?

Opmerking: Converteren van mysql_ naar mysqli_ mogelijk niet optimaal. Overweeg BOB als je bereid bent om al je code te converteren naar OOP .

Het kan verleidelijk zijn om te proberen alle exemplaren van mysql_ . te vervangen met mysqli_ en bid dat het werkt. Je zou in de buurt zijn, maar niet helemaal op punt.

Verbinding maken met de database:

Gelukkig, mysqli_connect werkt nauw genoeg om mysql_query dat je gewoon hun functienamen kunt verwisselen.

mysql_:

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

mysqli_:

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

Een database selecteren

Nu, met de meeste andere functies in de mysqli_ bibliotheek, moet u mysqli_select_db . doorgeven de databaseverbinding als zijn eerste parameter. De meeste mysqli_ functies vereisen eerst het verbindingsobject.

Voor deze functie kun je gewoon de volgorde veranderen van de argumenten die je aan de functie doorgeeft. Als je het nog niet eerder een verbindingsobject hebt doorgegeven, moet je het nu als eerste parameter toevoegen.

mysql_:

mysql_select_db($dbname, $con);

mysqli_:

mysqli_select_db($con, $dbname);

Als bonus kun je ook de databasenaam als vierde parameter doorgeven aan mysqli_connect - het omzeilen van de noodzaak om mysqli_select_db . te bellen .

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

Gebruikersinvoer opschonen

mysqli_real_escape_string gebruiken lijkt erg op mysql_real_escape_string . U hoeft alleen het verbindingsobject als de eerste parameter door te geven.

mysql_:

$value1 = mysql_real_escape_string($input_string);

mysqli_:

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

Heel belangrijk:een query voorbereiden en uitvoeren

Een van de redenen waarom de mysql_ functies werden afgeschaft om te beginnen was hun onvermogen om voorbereide verklaringen te verwerken. Als u uw code eenvoudig converteert naar mysqli_ zonder deze belangrijke stap te zetten, bent u onderhevig aan enkele van de grootste zwakheden van de mysql_ functies.

Het is de moeite waard om deze artikelen over voorbereide verklaringen en hun voordelen te lezen:

Wikipedia - Opgestelde verklaringen

PHP.net - MySQLi opgestelde verklaringen

Opmerking:wanneer u voorbereide instructies gebruikt, is het het beste om elke kolom die u probeert te doorzoeken expliciet te vermelden, in plaats van de * notatie om alle kolommen te doorzoeken. Op deze manier kunt u ervoor zorgen dat u alle kolommen in uw aanroep naar mysqli_stmt_bind_result hebt verwerkt .

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);
}

Fouten weergeven

Het weergeven van fouten werkt een beetje anders met mysqli_ . mysqli_error vereist het verbindingsobject als zijn eerste parameter. Maar wat als de verbinding mislukt? mysqli_ introduceert een kleine set functies waarvoor het verbindingsobject niet nodig is:de mysqli_connect_* functies.

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. SQL Server Reguliere expressies in T-SQL

  2. hoe een woord in een mysql-kolom te vinden en te vervangen?

  3. SQLAlchemy of psycopg2?

  4. Verfijning van Oracle DG40DBC