Foros del Web » Programando para Internet » PHP »

Dudas MySQLi

Estas en el tema de Dudas MySQLi en el foro de PHP en Foros del Web. ¡Hola a tod@s! Recientemente vi el anuncio en el foro sobre la declaración de las funciones para MySQL como obsoletas a largo plazo, así que ...
  #1 (permalink)  
Antiguo 04/09/2012, 12:48
Avatar de Karmac  
Fecha de Ingreso: agosto-2011
Ubicación: Bilbao
Mensajes: 196
Antigüedad: 12 años, 8 meses
Puntos: 34
Pregunta Dudas MySQLi

¡Hola a tod@s! Recientemente vi el anuncio en el foro sobre la declaración de las funciones para MySQL como obsoletas a largo plazo, así que me puse a aprender MySQLi. He aquí unas dudas que tengo:

Código PHP:
if ( $query $mysqli->query'SELECT MAX(position) FROM notes' ) )
{
    
$row $query->fetch_arrayMYSQLI_NUM );
    
$position $row[0] + 1;

    if ( 
$query $mysqli->prepare'INSERT INTO notes (text, date, position) VALUES (?, ?, ?)' ) )
    {
        
$date time();
        
$query->bind_param'sii'$text$date$position );
        
$query->execute();
        echo 
self::serialized_return$mysqli->insert_id$text$date );
    }
    else
        throw new 
Error'Error al intentar añadir la nota.' );
}
else
    throw new 
Error'Error al intentar añadir la nota.' ); 
1. ¿El manejo de errores es correcto? Quiero decir, ¿basta con comprobar si $query se declara correctamente o $query->execute() también puede devolver algún error?
2. Esto ya sobre PHP, ¿puedo hacer algo para no tener que repetir el else dos veces?

Código PHP:
foreach ( $positions as $position => $id )
    
$query_vals[] = ' WHEN ' . (int)$id ' THEN ' . ( (int)$position );

if ( 
$query $mysqli->prepare'UPDATE notes SET position = CASE id ' implode$query_vals ) . ' END' ) )
{
    
$query->execute();
    throw new 
Success'Las notas fueron ordenadas correctamente.' );

1. En este otro código, en vez de construir la consulta con un bucle y depués ejecutarla, ¿puedo utilizar $query->bind_param() como en el código de arriba para que me vaya agregando los datos del array?
2. En este código en el que las variables externas son forzadas a ser del tipo integer, ¿es más seguro utilizar una consulta preparada o puedo ejecutarlo con mysqli:query()?

Gracias por responder.
Saludos.
  #2 (permalink)  
Antiguo 04/09/2012, 12:59
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Dudas MySQLi

yo que usted empezaría con PDO, su implementación es mejor, soporta más DB y tiene una expectativa de vida más larga (de la mano con el desarrollo de PHP), además de que es un paso seguro para saltar a ORM's como Doctrine2
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 04/09/2012, 13:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Dudas MySQLi

Por otro lado el throw new Success(), ¿estas realmente implementando algo así? Las excepciones son precisamente para casos excepcionales no para controlar el flujo de tu aplicación.

Y también voy de acuerdo con @maycolalvarez, es mucho mejor pensar en PDO si no estas usando ninguna característica específica de MySQL.

Saludos.
  #4 (permalink)  
Antiguo 04/09/2012, 16:46
Avatar de Karmac  
Fecha de Ingreso: agosto-2011
Ubicación: Bilbao
Mensajes: 196
Antigüedad: 12 años, 8 meses
Puntos: 34
Respuesta: Dudas MySQLi

Gracias por responder.
Lo de PDO ya lo había visto, pero no le veía muchas más ventajas respecto a MySQLi, teniendo en cuenta que siempre uso MySQL como base de datos.

Si no es con excepciones, ¿como me recomiendas manejas los errores y demás mensajes de mi aplicación?

Aún así, ¿podríais responderme a lo de $query->execute() (errores que pueda devolver) y la seguridad en el segundo código? Muchas gracias.

Etiquetas: dudas, mysql, mysqli, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:08.