PDA

Ver la versión completa : PHP PHP y MSQLi por favor que hoy no doy más...



anakinmay
15/12/2016, 18:09
Antes esto funcionaba con normalidad haciendo una conexión MYSQL

function obtieneClases($profesor_id) {
$sql = "SELECT grupo_id, nombre, profesor_id FROM grupo WHERE profesor_id = " . $profesor_id . ";";
$resultado = consultaSQL($sql);
$clases = array();
if ($resultado) {
$row = $resultado->fetch();
while ($row != null) {
$clases[] = new objetoClase($row);
$row = $resultado->fetch();
}
}
return $clases;
}
function muestraClases($profesor_id) {
$clases = obtieneClases($profesor_id);
foreach ($clases as $clase) {
echo 'Clase: '.$clase->getNombre().' id: '.$clase->getGrupo_id().' id del profesor: '.$clase->getProfesor_id();
}
}


Pero al cambiar la conexión a MYSQLi me tira el siguiente error:

Fatal error: Call to undefined method mysqli_result::fetch() ... En la línea en rojo

Me podéis decir que pasa y como solucionarlo?? Ya si me dais una explicación razonable guay..

Es que llevo unos días muy metido en el proyecto y cambiando cosas y hoy no doy más de si..

Necesito ayuda please!!!

Help!!!!

swapd0
15/12/2016, 18:35
¿Por que no llamas a fetch_row() en vez de fetch(), que por cierto no la veo en la documentación http://php.net/manual/es/mysqli-result.fetch-array.php?

romeroca
15/12/2016, 18:40
Se me ocurren varias posibles causas:

- Versión obsoleta de PHP
- Que no estés usando el driver NATIVO ( mysqlnd )

anakinmay
15/12/2016, 20:07
¿Por que no llamas a fetch_row() en vez de fetch(), que por cierto no la veo en la documentación http://php.net/manual/es/mysqli-result.fetch-array.php?

Muchas gracias!!!

Una hora pegándome con ello y no lo veía.. he puesto sustituido por fetch_array y ya funciona.. con fetch a secas también pero no me devolvía el array asociativo para crear los objetos..

Guay a ver si me aclaro.. estar pendientes de mi que os voy a pedir más que ayuda seguro.. tengo una buena liada con el proyecto.. y en enero tengo que entregarlo para titular, la semana próxima acabo las prácticas y por horarios en mi curro voy a tener menos tiempo para el proyecto.

Gracias!!!

-----Actualizado-----


Se me ocurren varias posibles causas:

- Versión obsoleta de PHP
- Que no estés usando el driver NATIVO ( mysqlnd )

Lo del la versión obsoleta del driver ya lo vi, pero no gestiono nada del servidor es el que nos pone el instituto..

A ver si acabo con 42 y en el instituto!!

Jajajaja

Muchas gracias!!!

Juk
15/12/2016, 20:27
xD Estoy yo también con MySql y PHP, a ver si tengo todo listo el día 8, para presentarme a exámenes :P

IronArthur
16/12/2016, 11:41
Ya se que es tema educativo y tal, pero ver conexiones a BBDD en php a pelo me da urticaria. Sobre todo porque todavia no he podido erradicarlas del código de mi empresa.

ORMs chicos, recordar el palabro. Nunca sin uno, como los condones. (eloquent mi preferido para php-mysql ahora mismo)

Salu2

josepzin
16/12/2016, 11:46
Yo uso CodeIgniter así que el tema de las conexiones en PHP puro apenas si lo he tocado.

IronArthur
16/12/2016, 13:24
Yo uso CodeIgniter así que el tema de las conexiones en PHP puro apenas si lo he tocado.

Solo te digo que mi jefe anda medio acojonado porque van a mandar a la mierda de una vez la libreria de mysql vieja..... y tiene todavia por ahí código que la usa..

Salu2

josepzin
16/12/2016, 13:32
¿CodeIgniter?

swapd0
16/12/2016, 13:32
Solo te digo que mi jefe anda medio acojonado porque van a mandar a la mierda de una vez la libreria de mysql vieja..... y tiene todavia por ahí código que la usa..

Salu2
Se supone que siempre que vas a usar una librería externa la debes encapsular dentro de una clase o con un conjunto de funciones, así es mas fácil cambiar de librería ya que solo tienes que reimplementar la clase o las funciones, tu código no depende directamente de la librería.

Aunque con tanto codigo legacy es normal que pase eso.

anakinmay
16/12/2016, 13:55
Entonces que aconsejáis??

Para los nuevos en esto lo que nos han enseñado..

Encima con un temario del 2009 (Creo que era, estudiamos windows 7 no te digo más), al menos e intentado adaptarme a MYSQLi para que dure más el asunto.

IronArthur
16/12/2016, 14:08
Se supone que siempre que vas a usar una librería externa la debes encapsular dentro de una clase o con un conjunto de funciones, así es mas fácil cambiar de librería ya que solo tienes que reimplementar la clase o las funciones, tu código no depende directamente de la librería.

Aunque con tanto codigo legacy es normal que pase eso.

Hombre mi jefe es el tipico auto-aprendido, y eso de los ORMs le suena lo mismo q el abs del coche. Pero bueno tiene medio encapsulado el código de acceso a BD pero las consultas sql siguen estando ahí en strings sin escape ni nada. Ya hemos tenido unas cuantas historias con intentos de hackeo e injections.


Entonces que aconsejáis??

Para los nuevos en esto lo que nos han enseñado..

Encima con un temario del 2009 (Creo que era, estudiamos windows 7 no te digo más), al menos e intentado adaptarme a MYSQLi para que dure más el asunto.

A ver educativamente TIENES que saber sql, y saber como funciona más o menos internamente es positivo. Pero vamos es como saber como renderiza internamente el Unreal Engine cuando estás programando algo para ese motor. Está bien saber que hace pero no te hace falta para nada a nivel funcional.

Aprender a usar ORMs es algo muy útil pq no los suelen enseñar nunca (los profes no suelen conocerlos), y cuando los conoces trabajar sin ellos es como volver a conducir sin dirección asistida.

Salu2

josepzin
16/12/2016, 14:33
Saber sql yo creo que es MUY úti.

IronArthur
16/12/2016, 15:08
Saber sql yo creo que es MUY úti.

Imprescindible, pero una cosa no quita la otra.

Salu2

anakinmay
17/12/2016, 16:45
Desde mi completa ignorancia.. que **** son ORMs???

swapd0
17/12/2016, 17:07
Object Relational Mapping, para acceder a las tablas y relaciones de la base de datos como si fueran objetos.

josepzin
17/12/2016, 18:32
Lo que viene a ser una librería para acceder a MySQL pero suena más guai decir O-ERRE-EME :-D :-P

akualung
17/12/2016, 22:10
Lo que viene a ser una librería para acceder a MySQL pero suena más guai decir O-ERRE-EME :-D :-P

Hombre, pero es que no es solo una librería para conectarse a la BD y lanzar órdenes SQL y ya está, es para acceder a la BD sin tener que escribir tú las consultas, trabajando solo con objetos en el lenguaje que tú ya conoces y "persistiéndolos" en la BD automáticamente el propio ORM (él hace las consultas que sean necesarias, así como las relaciones, etc, en plan caja negra).