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 uma instrução SQL para ser executada
db2_prepare() cria uma instrução SQL preparada que pode
incluir 0 ou mais marcadores de parâmetros (caracteres ?)
representando parâmetros para entrada, saída ou entrada/saída. Pode-se passar
parâmetros para a instrução preparada usando
db2_bind_param(), ou apenas para valores de entrada, como um array
passado para db2_execute().
Existem três vantagens principais em usar instruções preparadas em uma aplicação:
connectionstatementoptions
Retorna um recurso de instrução se a instrução SQL foi analisada com sucesso e
preparada pelo servidor de banco de dados. Retorna false se o servidor de banco de dados
retornou um erro. Pode-se determinar qual erro foi retornado chamando
db2_stmt_error() ou db2_stmt_errormsg().
Exemplo #1 Preparando e executando uma instrução SQL com marcadores de parâmetros
O exemplo a seguir prepara uma instrução INSERT que aceita quatro marcadores de parâmetros e, em seguida, itera sobre um array de arrays contendo os valores de entrada a serem passados para 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