Debian 11 PHP db2_connect() no funciona / PECL instalado ibm_db2

3 minutos de lectura

He realizado los siguientes pasos y estoy usando Debian 11.

  • Instalé el controlador CLI para DB/2 desde el sitio web de IBM
  • Instalé el paquete ibm_db2 a través de pecl para PHP PECL
  • Edité los archivos PHP.INI para apache2 y CLI.
  • Mi script PHP se está ejecutando y acepta el comando db2_connect()

Sin embargo, no se conecta a mi servidor DB/2. Me he asegurado de tener conectividad desde el servidor Debian al servidor DB/2.

Recibo constantemente el siguiente mensaje:

Advertencia de PHP: db2_connect(): SQLGetDiagRec devolvió -2 (¿funciona el controlador?) en /var/www/html/db2.php en la línea 7 Error de conexión. Procesamiento terminado

Cualquier ayuda es apreciada. ¿Es correcta la cadena de la base de datos $? ¿Hay otros pasos de configuración que deban tomarse?

Este es mi script PHP hasta ahora:

<?php
$database="NAMZPR1:50055";
$user="bouser";
$password = 'xxx';

$conn = db2_connect($database, $user, $password);

if ($conn) {
    echo "Connection succeeded.";
    db2_close($conn);
}
else {
    echo "Connection failed.";
}

echo "Done Processing ...";
?>

  • ¿Configuró correctamente las variables de entorno requeridas (por ejemplo, LD_LIBRARY_PATH, IBM_DB_HOME, PATH) para el ID de usuario/cuenta que ejecuta PHP (es decir, la cuenta que ejecuta Apache)? Obtiene este síntoma cuando el controlador db2cli no puede cargarse o no puede inicializarse debido a problemas de configuración. Ver github.com/php/pecl-database-ibm_db2

    – mao

    3 de febrero a las 8:42

  • Todavía tengo “conexión fallida”. Agregar las variables de entorno ayudó. ¿Qué poner en la variable $base de datos? ¿Dirección IP?

    – Simón Giesen

    3 de febrero a las 9:13

  • El campo de la base de datos puede ser un DSN (coloca los detalles de DSN en su archivo db2dsdriver.cfg externamente), o en su lugar, una cadena de conexión (todos los detalles están dentro de su script php). Consulte los documentos. Ejemplo: $connection_string="DATABASE=xxx;HOSTNAME=yyy;PORT=60000;PROTOCOL=TCPIP;UID=zzz;PWD=www" ; Consulte los scripts php de IBM, que se encuentran en ~/sqllib/samples/php (para el propietario de la instancia Db2 en el servidor Db2), también en línea en el centro de conocimiento: ibm.com/docs/en/db2/11.5?topic=api-php-muestras también en github github.com/IBM/db2-samples/tree/master/php

    – mao

    3 de febrero a las 9:30

  • @mao: reinicié mi servidor Debian y el problema volvió a ocurrir. Estoy confundido. Agregué las siguientes líneas: export IBM_DB_HOME=/opt/ibm/db2/V11.5/ export LD_LIBRARY_PATH=/opt/ibm/db2/V11.5/lib64 export LIBPATH=/opt/ibm/db2/V11.5 /lib64 export PATH=/opt/ibm/db2/V11.5/bin:$PATH ¿Qué hacer a continuación?

    – Simón Giesen

    8 de febrero a las 14:39

  • Recibí de nuevo Conexión fallida. [IBM][CLI Driver] SQL10007N No se pudo recuperar el mensaje “0”. Código de motivo: “3”. SQLCODE=-1024 ???

    – Simón Giesen

    8 de febrero a las 15:37

Resultó que se debe editar db2dsdriver.cfg o se debe usar una cadena de conexión válida en PHP. Aquí hay una muestra de PHP.

<?php
$connection_string="DATABASE= ;HOSTNAME= ;PORT= ;PROTOCOL=TCPIP;UID= ;PWD= ";

$conn = db2_connect($connection_string, "", "");

if ($conn) {
    echo "Connection succeeded.";
    db2_close($conn);
}
else {
    echo "Connection failed. " . db2_conn_errormsg() . " ???";
}
 
?>

Además, asegúrese de que se hayan establecido las variables de entorno. Gracias y reconocimiento a “mao”.

¿Ha sido útil esta solución?