CakeFest 2024: The Official CakePHP Conference

db2_prepare

(PECL ibm_db2 >= 1.0.0)

db2_prepare Prepara un comando SQL para su ejecución

Descripción

db2_prepare(resource $connection, string $statement, array $options = ?): resource

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().

Parámetros

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().

Valores devueltos

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().

Ejemplos

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);
}
}
?>

Ver también

add a note

User Contributed Notes 3 notes

up
0
agr dot valayam at gmail dot com
7 years ago
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]
up
0
NormInNorman
14 years ago
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.
up
-2
ndt.db2 at google mail
17 years ago
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
To Top