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:
Desempenho: quando uma instrução é preparada, o servidor de banco de dados cria um plano de acesso otimizado para recuperar dados com essa instrução. Subsequentemente, emitir a instrução preparada com db2_execute() permite que as instruções reutilizem esse plano de acesso e evita a sobrecarga de criar dinamicamente um novo plano de acesso para cada instrução emitida.
Segurança: quando uma instrução é preparada, podem ser incluídos marcadores de parâmetros para valores de entrada. Quando uma instrução preparada é executada com valores de entrada para marcadores, o servidor de banco de dados verifica cada valor de entrada para garantir que o tipo corresponda à definição da coluna ou definição do parâmetro.
Funcionalidade avançada: Os marcadores de parâmetros não apenas permitem que sejam passados valores de entrada para instruções SQL preparadas, eles também permitem que sejam recuperados parâmetros OUT e INOUT de procedimentos armazenados usando db2_bind_param().
connection
Uma variável de recurso de conexão de banco de dados válida, conforme retornada de db2_connect() ou db2_pconnect().
statement
An SQL statement, optionally containing one or more parameter markers..
options
Um array associativo contendo opções de instrução. Você pode usar este parâmetro para solicitar um cursor rolável em servidores de banco de dados que suportam esta funcionalidade.
Para uma descrição das opções de instrução válidas, consulte db2_set_option().
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