Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Dudas con MySQLI

Estas en el tema de Dudas con MySQLI en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas, Tengo un montón de dudas sobre MySQLI. He estado mirando en la web de php.net, el manual de MySQLI pero no me entero de ...
  #1 (permalink)  
Antiguo 28/09/2008, 17:39
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Dudas con MySQLI

Buenas,

Tengo un montón de dudas sobre MySQLI. He estado mirando en la web de php.net, el manual de MySQLI pero no me entero de nada.

Por qué hay tres tipos? El normal, STMT y Result? En el normal no tiene un ->num_rows, por ejemplo. Entonces, si tengo creado un objeto de esta manera
$gas=new mysqli('localhost','root','','gas'); cómo podría contar el número de filas que tengo al hacer un a select?

Ejemplo:

$gas=new mysqli('localhost','root','','gas');
if($gas==FALSE){
echo('Error en la conexión.');
exit();
}

$sConsulta = "SELECT * FROM clientes";
$resultado = $gas->query($sConsulta);
if($resultado==FALSE){
echo ('Error en la consulta.');
echo ($gas->error);
exit();

Un $rows = $resultado->num_rows no puedo hacer, ni un $rows = $gas->num_rows ya que el objeto está creado con la clase mysqli y no mysqli_Result que es dónde está el método ->num_rows.

Y tampoco he visto que los dos últimas hereden nada de la normal.

Gracias.
  #2 (permalink)  
Antiguo 28/09/2008, 17:43
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Dudas con MySQLI

Un ejemplo:

Código PHP:
<?php

$conexion 
= new mysqli('localhost''user''pass''db_name');
$result $conexion->query("SELECT * FROM tabla");
if (
mysqli_connect_errno())
{
echo 
'Error: Could not connect to database. Please try again later.';
exit;
}
$num_result $result->num_rows;
for(
$i=0$i<$num_result$i++) //Tambien podemos usar un while que es mas sencillo.
{
$row $result->fetch_object();
echo 
$row->campo;
}

//con while
while($row $result->fetch_object())
{
echo 
$row->campo;
}

?>

Última edición por Ronruby; 28/09/2008 a las 18:03
  #3 (permalink)  
Antiguo 28/09/2008, 17:45
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Dudas con MySQLI

OK, muchas gracias, funciona bien. Osea que si ponemos $result->num_rows aún habiéndolo declara do como new mysqli, funciona. En la web de php no me quedaba claro (http://es.php.net/mysqli). Hay tresa clases de MySQLI y pensaba que habñia que crear objetos con cada una para poder usar sus métodos.

Última edición por cluster28; 28/09/2008 a las 18:07
  #4 (permalink)  
Antiguo 28/09/2008, 18:05
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Dudas con MySQLI

Si, deberia conectarse la base de datos.

Para comprobar simplemente usa:
if(!$gas){
//error
}

El ejemplo que te mostre me funciona sin problemas.

Con respecto a la forma STMT es para lo que se llama: Prepared Statement.
Un ejemplo:
Código PHP:
$query "insert into books values(?, ?, ?, ?)"//se sustituyen los valores por ?
$stmt $db->prepare($query); //preparas la consulta
$stmt->bind_param("sssd"$isbn$author$title$price); //sssd significa: string, string, string, double. esto es parecido al printf de php
$stmt->execute(); //ejecuta la consulta
echo $stmt->affected_rows.' book inserted into database.';
$stmt->close(); 
es muy usado cuando por ejemplo tienes que hacer muchos inserts.

Última edición por Ronruby; 28/09/2008 a las 18:10
  #5 (permalink)  
Antiguo 28/09/2008, 19:03
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 con MySQLI

Tema trasladado a PHP Orientado a Objetos.
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 06:21.