A simple select example.
$pr_stmt = db2_prepare ($this->conn,"select count(*) from note where city=? and year= ?");
db2_execute($pr_stmt,array('test',2016));
$count_res = db2_fetch_array($pr_stmt);
echo "Count =".$count_res[0]
(PECL ibm_db2 >= 1.0.0)
db2_prepare — Prepara un comando SQL para su ejecución
db2_prepare() Crea un comando SQL preparado que puede incluir
0 o más marcadores de parámetro (con el carácter ?
)
los cuales representan parámetros de entrada, salida o entrada/salida.
Se pueden pasar parámetros al comando SQL preparado usando db2_bind_param(),
o sólo para valores de entrada, como un arreglo enviado a db2_execute().
Hay tres ventajas principales al usar comandos SQL preparados en una aplicación:
Rendimiento: Cuando se prepara un comando SQL, el servidor de base de datos crea un plan de acceso optimizado para devolver datos con ese comando SQL. Posteriormente al enviar el comando SQL preparado a través de db2_execute() se podrá reutilizar el plan de acceso y así se evitará la sobrecarga que se produce cuando éste debe crearse nuevamente.
Seguridad: Cuando se prepara un comando SQL, se pueden incluir marcadores de parámetros para valores de entrada. Cuando se ejecuta ese comando usando los marcadores con valores de entrada, la base de datos puede chequear cada valor de entrada para asegurar que el tipo de dato enviado coincide con la definición del campo o del parámetro.
Funcionalidad avanzada: Los marcadores de parámetros no solo permiten pasar valores de entrada, además permiten obtener datos OUT e INOUT desde procedimientos almacenados usando db2_bind_param().
connection
Una variable de conexión obtenida con db2_connect() o con db2_pconnect().
statement
Un comando SQL, que puede contener opcionalmente uno o más marcadores de parámetros.
options
Un arreglo asociativo que contiene opciones para el comando. Se puede usar para solicitar un cursor desplazable en servidores que lo permitan.
Se pueden revisar las opciones en db2_set_option().
Si el comando SQL fue parseado y preparado exitosamente devuelve un resource,
o false
en caso de producirse un error. Se puede determinar qué error ocurrió utilizando
db2_stmt_error() o db2_stmt_errormsg().
Ejemplo #1 Preparando y ejecutando un comando SQL con marcadores de parámetros.
El siguiente ejemplo prepara un comando INSERT que acepta cuatro marcadores de parámetros, y luego ejecuta iteraciones sobre un arreglo que contiene los valores de entrada, y éstos son enviados a través de db2_execute().
<?php
$animals = array(
array(0, 'cat', 'Pook', 3.2),
array(1, 'dog', 'Peaches', 12.3),
array(2, 'horse', 'Smarty', 350.0),
);
$insert = 'INSERT INTO animals (id, breed, name, weight)
VALUES (?, ?, ?, ?)';
$stmt = db2_prepare($conn, $insert);
if ($stmt) {
foreach ($animals as $animal) {
$result = db2_execute($stmt, $animal);
}
}
?>
A simple select example.
$pr_stmt = db2_prepare ($this->conn,"select count(*) from note where city=? and year= ?");
db2_execute($pr_stmt,array('test',2016));
$count_res = db2_fetch_array($pr_stmt);
echo "Count =".$count_res[0]
If you are having problems with scrollable cursors and the prepare statement, I've found that you cant set the scrollable option on the connection. The following code (which tries to get the 2nd record):
<?php
$sql = "SELECT * FROM SCHEMA.TABLENAME";
$options = array('cursor' => DB2_SCROLLABLE);
$conn = db2_connect($database, $user, $password,$options);
$stmt = db2_prepare($conn, $sql);
$result = db2_execute($stmt);
$row = db2_fetch_both($stmt, 2);
$conn = db2_connect($database, $user, $password);
$stmt = db2_prepare($conn, $sql, $options);
$result = db2_execute($stmt);
$row = db2_fetch_both($stmt, 2);
?>
Will result in the following error:
Warning: db2_fetch_both() [function.db2-fetch-both]: Fetch Failure in dbtest.php on line 7
In fact, even if you set the options on both the connection and the prepare your fetch will not work. You must only set that option on the prepare.
if you have the error message : PHP Warning: db2_prepare() [<a href='function.db2-prepare'>function.db2-prepare</a>]: Statement Prepare Failed in (....)
and cannot display the error message using db2_stmt_errormsg() , then check if your database connection handle is (still) valid