PHP, Oracle y ODBC: ¿Cómo verificar si el set de resultados está vacío?

Queridos nerds y forumianers,

Tengo un delicioso problema con PHP en una database Oracle con controller ODBC.

Primero el código:

$ora_conn = odbc_connect($ora_dsn, $ora_user, $ora_pass, SQL_CUR_USE_ODBC); $ora_data = odbc_exec($ora_conn,$sql); //echo "test: ".odbc_num_rows( $ora_data ); //exit; if(odbc_num_rows( $ora_data ) > 0){ // do something in case no result came back } if($ora_data){ // do something in case result came back } 

Si elimino la testing, ¡siempre recuperaré -1! No importa si la statement resulta en 0, 1 o 5 filas …

Entonces con este código nunca puedo get la información si no hay ningún resultado, 1 resultado o más resultados regresando.

¿Tienes alguna idea sobre cómo resolver este problema?

¡Muchas gracias de antemano por su ayuda!

Saludos cordiales, Ingmar

odbc_num_rows parece ser confiable solo para INSERTAR, ACTUALIZAR y ELIMINAR consultas.

El manual dice:

El uso de odbc_num_rows () para determinar el número de filas disponibles después de un SELECT devolverá -1 con muchos controlleres.

una forma de evitar este comportamiento es hacer un COUNT(*) en SQL en su lugar. Vea aquí para un ejemplo.

 if(odbc_num_rows( $ora_data ) == 0){ // do something in case no result came back } if(!$ora_data){ // do something in case result came back } 

Lo resolví, gracias por tus respuestas …

Mi solución es: Código primero

 $sql = "SELECT GUID FROM SMSITEACCESS WHERE PROJECTID = 901981 AND SID = " . $guid; $ora_data = odbc_exec($ora_conn,$sql); $arr = @odbc_fetch_array($ora_data); if($arr['GUID'] == ""){ $dbh_insert = new PDO($dsn,$dbuser,$dbpass); $dbh_insert->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $sql_insert = "INSERT INTO SMSITEACCESS (SID, CREATED, CREATEUSER, PROJECTID) VALUES ('".$guid."', SYSDATE, '".$userid."', '901981')"; $res_insert = $dbh_insert -> prepare($sql_insert); $res_insert -> execute(); $sql_insert=null; $res_insert=null; $dbh_insert=null; } odbc_free_result($ora_data); 

Agregué un file de inclusión en primer lugar. Esta secuencia de commands comtesting uno por uno si todas las tablas con las que se va a trabajar consisten al final de un set de datos. Si alguno de ellos no lo hace, se crea vacío.

Con esta solución ya no tengo que verificar si los datos vuelven o no …

Pudo haber sido mucho más fácil, pero el controller ODBC parece tener errores en este sentido.

Thnx para respuestas rápidas y tenga un buen día.

Ingmar

    Intereting Posts