Important when using classes:
You must call db2_execute() in the same scope as where you define / set / bind the variables.
For example:
<?php
class DB2Class {
public $conn;
private $usr = 'user';
private $pss = 'password';
private $cat = 'catalog';
public function db2_conn(){
$conn = db2_connect($this->cat,$this->usr,$this->pss);
if(!$conn)
throw new Exception(db2_conn_errormsg());
$this->conn = $conn;
}
public function db2_prep($sql){
if(!$stmt = db2_prepare($this->conn, $sql)){
throw new Exception($sql . " " . db2_stmt_errormsg());
return false;
}
return $stmt;
}
public function db2_exec($stmt){
if(!db2_execute($stmt))
throw new Exception(db2_stmt_errormsg($stmt));
}
}
/* This will NOT work */
function bindtest(){
try {
$db2 = new DB2Class;
$db2->db2_conn();
$stmt = $db2->db2_prep("SELECT * FROM TABLE WHERE FIELD = ?");
$field = 'value';
db2_bind_param($stmt, 1, "field", DB2_PARAM_IN);
$db2->db2_exec($stmt); // Results in Unbound Variable Error
while($row = db2_fetch_assoc($stmt))
var_dump($row);
} catch(Exception $e) {
error_log( $e->getMessage () );
}
}
/* This will work */
function bindtest(){
try {
$db2 = new DB2Class;
$db2->db2_conn();
$stmt = $db2->db2_prep("SELECT * FROM TABLE WHERE FIELD = ?");
$field = 'value';
db2_bind_param($stmt, 1, "field", DB2_PARAM_IN);
if(!db2_execute($stmt))
throw new Exception(db2_stmt_errormsg($stmt));
while($row = db2_fetch_assoc($stmt))
var_dump($row);
} catch(Exception $e) {
error_log( $e->getMessage () );
}
}
?>db2_bind_param
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
db2_bind_param
Референца за `function.db2-bind-param.php` со подобрена типографија и навигација.
db2_bind_param
("PECL ibm_db2" >= 1.0.0)
db2_bind_param — Врзува PHP променлива со параметар на SQL израз
= NULL
resource
$stmt,int
$parameter_number,string
$variable_name,int
$parameter_type = DB2_PARAM_IN,int
$data_type = 0,int
$precision = -1,int
$scale = 0): bool
Ги врзува PHP променливите со параметар на SQL израз db2_prepare()Ги врзува PHP променливите со параметар на SQL израз во ресурс на израз вратен од db2_execute().
Параметри
stmt- Подготвена изјава вратена од db2_prepare().
parameter_number- . Оваа функција ви дава поголема контрола врз типот на параметарот, типот на податоците, прецизноста и скалата за параметарот отколку што едноставно поминувате променлива како дел од опционалниот влезен низ до
variable_name-
Ја специфицира 1-индексираната позиција на параметарот во подготвениот израз.
parameter_number. parameter_type-
Низа што специфицира име на PHP променлива што треба да се врзе за параметарот специфициран од
DB2_PARAM_INКонстанта што специфицира дали PHP променливата треба да се врзе за SQL параметарот како влезен параметар (DB2_PARAM_OUT), излезен параметар (DB2_PARAM_INOUT), или како параметар што прифаќа влез и враќа излез (DB2_PARAM_FILE). За да избегнете трошење меморија, можете исто така да специфицирате data_type-
за да ја врзете PHP променливата со името на датотека што содржи податоци за големи објекти (BLOB, CLOB или DBCLOB).
DB2_BINARY,DB2_CHAR,DB2_DOUBLE, илиDB2_LONG. precision- Константа што специфицира како SQL тип на податоци треба да се врзе PHP променливата: една од
scale- Ја специфицира прецизноста со која променливата треба да се врзе за базата на податоци. Овој параметар исто така може да се користи за добивање излезни XML вредности од процедури за складирање. Негативна вредност специфицира максимална големина на XML податоците што ќе бидат добиени од базата на податоци. Ако овој параметар не се користи, ќе се претпостави стандардна вредност од 1MB за добивање на излезната XML вредност од процедурата за складирање.
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true на успех или false при неуспех.
Примери
Ја специфицира скалата со која променливата треба да се врзе за базата на податоци.
Пример #1 Врзување PHP променливи со подготвен израз db2_bind_param() SQL изразот во следниот пример користи два влезни параметри во WHERE клаузулата. Ние повикуваме
db2_bind_param()за да ги врземе двете PHP променливи со соодветните SQL параметри. Забележете дека PHP променливите не мора да бидат декларирани или доделени пред повикот до
$lower_limit ; во примерот,
db2_bind_param(), но $upper_limit
се доделува вредност пред повикот до
db2_bind_param(),
db2_execute().
<?php
$sql = 'SELECT name, breed, weight FROM animals
WHERE weight > ? AND weight < ?';
$conn = db2_connect($database, $user, $password);
$stmt = db2_prepare($conn, $sql);
// We can declare the variable before calling db2_bind_param()
$lower_limit = 1;
db2_bind_param($stmt, 1, "lower_limit", DB2_PARAM_IN);
db2_bind_param($stmt, 2, "upper_limit", DB2_PARAM_IN);
// We can also declare the variable after calling db2_bind_param()
$upper_limit = 15.0;
if (db2_execute($stmt)) {
while ($row = db2_fetch_array($stmt)) {
print "{$row[0]}, {$row[1]}, {$row[2]}\n";
}
}
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Pook, cat, 3.2 Rickety Ride, goat, 9.7 Peaches, dog, 12.3
Пример #2 Повикување на процедури со IN и OUT параметри
Процедурата match_animal во следниот пример прифаќа три различни параметри:
- Пример #2 Повикување на процедури за складирање со IN и OUT параметри
-
Процедурата за складирање match_animal во следниот пример прифаќа три различни параметри:
TRUEпараметар за влез (IN) што прифаќа име на првото животно како влез - параметар за влез-излез (INOUT) што прифаќа име на второто животно како влез и враќа стринг
<?php
$sql = 'CALL match_animal(?, ?, ?)';
$conn = db2_connect($database, $user, $password);
$stmt = db2_prepare($conn, $sql);
$name = "Peaches";
$second_name = "Rickety Ride";
$weight = 0;
db2_bind_param($stmt, 1, "name", DB2_PARAM_IN);
db2_bind_param($stmt, 2, "second_name", DB2_PARAM_INOUT);
db2_bind_param($stmt, 3, "weight", DB2_PARAM_OUT);
print "Values of bound parameters _before_ CALL:\n";
print " 1: {$name} 2: {$second_name} 3: {$weight}\n\n";
if (db2_execute($stmt)) {
print "Values of bound parameters _after_ CALL:\n";
print " 1: {$name} 2: {$second_name} 3: {$weight}\n\n";
print "Results:\n";
while ($row = db2_fetch_array($stmt)) {
print " {$row[0]}, {$row[1]}, {$row[2]}\n";
}
}
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Values of bound parameters _before_ CALL: 1: Peaches 2: Rickety Ride 3: 0 Values of bound parameters _after_ CALL: 1: Peaches 2: TRUE 3: 22 Results: Peaches, dog, 12.3 Pook, cat, 3.2 Rickety Ride, goat, 9.7
параметар за излез (OUT) што враќа збир на тежината на двете идентификувани животни
Дополнително, процедурата за складирање враќа сет на резултати што се состои од животните наведени по азбучен ред, почнувајќи од животното што одговара на влезната вредност на првиот параметар и завршувајќи со животното што одговара на влезната вредност на вториот параметар.
<?php
$stmt = db2_prepare($conn, "INSERT INTO animal_pictures(picture) VALUES (?)");
$picture = "/opt/albums/spook/grooming.jpg";
$rc = db2_bind_param($stmt, 1, "picture", DB2_PARAM_FILE);
$rc = db2_execute($stmt);
?>Види Исто така
- db2_execute() - Извршува подготвена SQL изјава
- db2_prepare() - Подготвува SQL изјава за извршување