es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La sentencia preparada PDO contra la base de datos dB2 falló al ejecutarse más de una vez en el servidor Ubuntu.

Tengo una declaración preparada de PDO de la siguiente manera:

$db2 = new PDO($dsn,$user_db, $pass_db);
$db2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db2->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_TO_STRING);
$stm = $db2->prepare("SELECT COLUMN1, COLUMN2 from LIBRARY.TABLE1 where COLUMN3 = :col3");

#primera ejecución
$stm->bindParam(":col3", "JOHN" );
$stm->execute();
$resultado = $stm->fetch();


#segunda ejecución
$stm->bindParam(":col3", "LAURENCE");
$stm->execute();
$resultado = $stm->fetch();

La primera ejecución es exitosa, pero en la segunda ejecución obtengo el siguiente error:

SQLSTATE[HY010]: Function sequence error: 0 [unixODBC][Driver Manager]Function sequence error (SQLExecute[0] at /build/php7.0-AbaziF/php7.0-7.0.33/ext/pdo_odbc/odbc_stmt.c:260)

Cualquier ayuda o consejo sería muy apreciado.

Entorno:

Versión de PHP 7.0.33-0ubuntu0.16.04.16
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Según el mensaje de error, parece que puede haber un problema con la secuencia de funciones que se ejecutan. Una posible explicación podría ser que la declaración no se reinicia correctamente antes de la segunda ejecución.

    Para solucionar este problema, podría intentar agregar la siguiente línea de código antes de la segunda ejecución:

    $stm->closeCursor();
    

    Esto liberará cualquier recurso asociado con la ejecución anterior y podría ayudar a asegurar que la declaración se reinicie correctamente antes de ejecutar la segunda consulta.

    Otra cosa que podría verificar es el tipo de datos de la columna que se consulta. Si el tipo de datos de COLUMN3 no es una cadena de texto, es posible que no sea válido enlazar un parámetro de cadena utilizando bindParam(). En este caso, podría intentar usar bindValue() en su lugar, especificando el tipo de datos adecuado.

    Si ninguna de estas sugerencias funciona, es posible que deba proporcionar más información sobre el mensaje de error específico o consultar a un experto en DB2/ODBC para ayudar a diagnosticar el problema.

Comments are closed.