Foros del Web » Programando para Internet » PHP »

Mar de dudas con PDO

Estas en el tema de Mar de dudas con PDO en el foro de PHP en Foros del Web. Buenas, estoy tratando de migrar de Mysql a PDO. He de decir que el driver Mysql me era muy intuitivo y lo conocía de memoria ...
  #1 (permalink)  
Antiguo 27/08/2012, 07:53
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 15 años, 7 meses
Puntos: 26
Mar de dudas con PDO

Buenas, estoy tratando de migrar de Mysql a PDO.

He de decir que el driver Mysql me era muy intuitivo y lo conocía de memoria je. Pero debido a que fue considerado obsoleto, decidí migrar de driver. Por recomendaciones elegí PDO.

El tema es que, a pesar de realizar una conexión exitosa, me esta constando horrores, lograr recuperar datos de la db.

Ejecuto el siguiente código:
Código PHP:
$dt "'$unaFecha 00:00:00'";
    
    try{
        
$result $con->prepare("SELECT IdMenu FROM menues WHERE ? BETWEEN Desde AND Hasta");
        
$result->execute(array($dt));
        
        
$row $result->fetchAll();
        return 
$row[0];
    }
    
    catch(
PDOException $e){
        echo 
'Error: ' $e->getMessage();
    } 
Y PHP me devuelve:
Cita:
[27-Aug-2012 13:44:21 UTC] PHP Notice: Undefined offset: 0 in /media/Datos/www/KitchenMyAdmin/src/library/menu.inc.php on line 17
Lo que no entiendo es lo siguiente. Aparentemente la consulta se ejecuta, pero cómo puedo recuperar los datos ?.

Saludos y gracias !
  #2 (permalink)  
Antiguo 27/08/2012, 08:23
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Mar de dudas con PDO

el error es un notice que te indica sobre un indice que no encuentra en un array, pero como no es fatal la consulta si se ejecuta, pero puede que esté retornando un array vació, depura bien lo que estás haciendo con:

$dt = "'$unaFecha 00:00:00'";

¿que se supone que es?: no hay operadores para una expresión válida
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 27/08/2012, 08:52
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: Mar de dudas con PDO

que pasa si haces esto?



Código PHP:
Ver original
  1. print_r($row);
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #4 (permalink)  
Antiguo 27/08/2012, 11:59
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Mar de dudas con PDO

tienes comillas de mas en la variable que estas colocando los datos

Código PHP:
Ver original
  1. $dt = "$unaFecha 00:00:00";
  2. //o
  3. $dt = '$unaFecha 00:00:00';
imagino que una fecha es un date valido en el formato Y-m-d, qe es lo que espera el campo datetime, como consejo adicional para que el pdo te de los errores en las consultas debes de luego de la instancia indicarle el modo del error
Código PHP:
Ver original
  1. try {
  2.     $db = new PDO($dns, $user; $password);
  3.     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  4. } catch(PDOException $e) {
  5.     echo $e->getMessage();
  6. }
saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 27/08/2012, 12:29
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 15 años, 7 meses
Puntos: 26
Respuesta: Mar de dudas con PDO

Bueno, gracias por las respuestas. Aclaro un poco el panorama.

Primero:

Código PHP:
/* $unaFecha es una fecha con formato Y-d-m que entra por parametro.
* Para hacerla compatible con MySQL, le agrego el 00:00:00
*/
$dt "'$unaFecha 00:00:00'"
En cuanto a la consulta, pareciera que se ejecuta correctamente porque:

Código PHP:
print_r($row); 
me devuelve:

Cita:
Array ( [0] => Array ( [IdMenu] => 3 [0] => 3 ) )
En cuanto a los mensajes de error, los tengo definidos como menciona Carlos, dentro del "main" del script.
  #6 (permalink)  
Antiguo 27/08/2012, 12:46
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: Mar de dudas con PDO

pues es que esta correcta la consulta entonces no?

Código PHP:
Ver original
  1. echo $row[0]["IdMenu"];
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #7 (permalink)  
Antiguo 27/08/2012, 12:52
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 15 años, 7 meses
Puntos: 26
Respuesta: Mar de dudas con PDO

Si, ahí anduvo.
Ahora, mi pregunta es la siguiente: ¿Cómo puedo manejar el array resultante como un objeto, algo así como el fetch_object?.
  #8 (permalink)  
Antiguo 27/08/2012, 13:03
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: Mar de dudas con PDO

abusado con fetch all obtienes todos los resultados de la consulta en un arreglo del tipo


arreglo[renglon][columna]

asi es ese metodo , si quieres algo como el fetch object

checa esto

http://mx2.php.net/manual/es/pdostatement.fetch.php


esto en especifico


Código PHP:
Ver original
  1. $result = $sth->fetch(PDO::FETCH_OBJ);
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #9 (permalink)  
Antiguo 27/08/2012, 13:11
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 15 años, 7 meses
Puntos: 26
Respuesta: Mar de dudas con PDO

Gracias por la data.
Saludos !.

Etiquetas: dudas, mar, mysql, pdo
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:52.