sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo convierto un script usando funciones mysql_ para usar funciones mysqli_?

Nota: Convirtiendo desde mysql_ a mysqli_ puede no ser óptimo. Considere PDO si está preparado para convertir todo su código a OOP .

Puede ser tentador tratar de reemplazar todas las instancias de mysql_ con mysqli_ y reza para que funcione. Estarías cerca pero no del todo en el punto.

Conectando a la base de datos:

Afortunadamente, mysqli_connect funciona lo suficientemente cerca de mysql_query que simplemente puede intercambiar los nombres de sus funciones.

mysql_:

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

mysqli_:

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

Seleccionar una base de datos

Ahora, con la mayoría de las otras funciones en mysqli_ biblioteca, deberá pasar mysqli_select_db la conexión a la base de datos como su primera parámetro. La mayoría de mysqli_ Las funciones requieren primero el objeto de conexión.

Para esta función, puede simplemente cambiar el orden de los argumentos que pasa a la función. Si no le pasó un objeto de conexión antes, debe agregarlo como el primer parámetro ahora.

mysql_:

mysql_select_db($dbname, $con);

mysqli_:

mysqli_select_db($con, $dbname);

Como beneficio adicional, también puede pasar el nombre de la base de datos como cuarto parámetro a mysqli_connect - saltándose la necesidad de llamar a mysqli_select_db .

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

Desinfectar la entrada del usuario

Usando mysqli_real_escape_string es muy similar a mysql_real_escape_string . Solo necesita pasar el objeto de conexión como primer parámetro.

mysql_:

$value1 = mysql_real_escape_string($input_string);

mysqli_:

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

Muy importante:preparar y ejecutar una consulta

Una razón por la que mysql_ funciones quedaron en desuso para empezar fue su incapacidad para manejar declaraciones preparadas. Si simplemente convierte su código a mysqli_ sin dar este importante paso, estará sujeto a algunas de las mayores debilidades de mysql_ funciones

Vale la pena leer estos artículos sobre declaraciones preparadas y sus beneficios:

Wikipedia - Declaraciones preparadas

PHP.net:declaraciones preparadas de MySQLi

Nota:cuando se usan declaraciones preparadas, es mejor enumerar explícitamente cada columna que intenta consultar, en lugar de usar el * notación para consultar todas las columnas. De esta manera, puede asegurarse de haber tenido en cuenta todas las columnas en su llamada a 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);
}

Mostrando errores

Mostrar errores funciona un poco diferente con mysqli_ . mysqli_error requiere el objeto de conexión como su primer parámetro. Pero, ¿y si la conexión falla? mysqli_ introduce un pequeño conjunto de funciones que no requieren el objeto de conexión:el mysqli_connect_* funciones.

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