©
本文档使用 PHP中文网手册 发布
(PECL maxdb >= 1.0)
maxdb_stmt_bind_param -- maxdb_stmt::bind_param — Binds variables to a prepared statement as parameters
过程化风格
$stmt
, string $types
, mixed &$var1
[, mixed &$...
] )面向对象风格
$types
, mixed &$var1
[, mixed &$...
] )过程化风格 (extended syntax):
$stmt
, string $types
, array &$var
)面向对象风格 (extended syntax):
$types
, array &$var
) maxdb_stmt_bind_param() is used to bind variables for the
parameter markers in the SQL statement that was passed to
maxdb_prepare() .
The string types
contains one or more characters which specify
the types for the corresponding bind variables.
The extended syntax of maxdb_stmt_bind_param() allows to give the parameters as an array instead of a variable list of PHP variables to the function. If the array variable has not been used before calling maxdb_stmt_bind_param() , it has to be initialized as an emtpy array. See the examples how to use maxdb_stmt_bind_param() with extended syntax.
Variables for SELECT INTO SQL statements can also be bound using maxdb_stmt_bind_param() . Parameters for database procedures can be bound using maxdb_stmt_bind_param() . See the examples how to use maxdb_stmt_bind_param() in this cases.
If a variable bound as INTO variable to an SQL statement was used before, the content of this variable is overwritten by the data of the SELECT INTO statement. A reference to this variable will be invalid after a call to maxdb_stmt_bind_param() .
For INOUT parameters of database procedures the content of the bound INOUT variable is overwritten by the output value of the database procedure. A reference to this variable will be invalid after a call to maxdb_stmt_bind_param() .
Character | Description |
---|---|
i | corresponding variable has type integer |
d | corresponding variable has type double |
s | corresponding variable has type string |
b | corresponding variable is a blob and will be sent in packages |
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
Example #1 面向对象风格
<?php
$maxdb = new maxdb ( 'localhost' , 'MONA' , 'RED' , 'DEMODB' );
if ( maxdb_connect_errno ()) {
printf ( "Connect failed: %s\n" , maxdb_connect_error ());
exit();
}
$maxdb -> query ( "CREATE TABLE temp.mycity LIKE hotel.city" );
$maxdb -> query ( "INSERT INTO temp.mycity SELECT * FROM hotel.city" );
$stmt = $maxdb -> prepare ( "INSERT INTO temp.mycity VALUES (?, ?, ?)" );
$stmt -> bind_param ( 'sss' , $zip , $name , $state );
$zip = '11111' ;
$name = 'Georgetown' ;
$state = 'NY' ;
$stmt -> execute ();
printf ( "%d Row inserted.\n" , $stmt -> affected_rows );
$stmt -> close ();
$maxdb -> query ( "DELETE FROM temp.mycity WHERE name='Georgetown'" );
printf ( "%d Row deleted.\n" , $maxdb -> affected_rows );
$maxdb -> close ();
?>
Example #2 过程化风格
<?php
$link = maxdb_connect ( "localhost" , "MONA" , "RED" , "DEMODB" );
if (! $link ) {
printf ( "Connect failed: %s\n" , maxdb_connect_error ());
exit();
}
maxdb_query ( $link , "CREATE TABLE temp.mycity LIKE hotel.city" );
maxdb_query ( $link , "INSERT INTO temp.mycity SELECT * FROM hotel.city" );
$stmt = maxdb_prepare ( $link , "INSERT INTO temp.mycity VALUES (?, ?, ?)" );
maxdb_stmt_bind_param ( $stmt , 'sss' , $zip , $name , $state );
$zip = '11111' ;
$name = 'Georgetown' ;
$state = 'NY' ;
maxdb_stmt_execute ( $stmt );
printf ( "%d Row inserted.\n" , maxdb_stmt_affected_rows ( $stmt ));
maxdb_stmt_close ( $stmt );
maxdb_query ( $link , "DELETE FROM temp.mycity WHERE name='Georgetown'" );
printf ( "%d Row deleted.\n" , maxdb_affected_rows ( $link ));
maxdb_close ( $link );
?>
以上例程的输出类似于:
1 Row inserted. 1 Row deleted.
Example #3 过程化风格 (SELECT INTO)
<?php
$link = maxdb_connect ( "localhost" , "MONA" , "RED" , "DEMODB" );
if (! $link ) {
printf ( "Connect failed: %s\n" , maxdb_connect_error ());
exit();
}
$stmt = maxdb_prepare ( $link , "SELECT price INTO ? FROM hotel.room where hno = ? and type = ?" );
if (! $stmt ) {
printf ( "Prepare failed: %s\n" , maxdb_error ( $link ));
}
$hno = "50" ;
$rtype = "suite" ;
maxdb_stmt_bind_param ( $stmt , 'dss' , $price , $hno , $rtype );
maxdb_stmt_execute ( $stmt );
printf ( "%f\n" , $price );
maxdb_stmt_close ( $stmt );
?>
以上例程的输出类似于:
21.600000
Example #4 过程化风格 (DB procedure)
<?php
$link = maxdb_connect ( "localhost" , "MONA" , "RED" , "DEMODB" );
if (! $link ) {
printf ( "Connect failed: %s\n" , maxdb_connect_error ());
exit();
}
maxdb_report ( MAXDB_REPORT_OFF );
maxdb_query ( $link , "DROP DBPROC test_proc" );
maxdb_report ( MAXDB_REPORT_ERROR );
$query = "create dbproc test_proc (INOUT e_text char(72)) AS select * from SYSDBA.DUAL; fetch into :e_text;" ;
maxdb_query ( $link , $query );
$stmt = maxdb_prepare ( $link , "CALL test_proc (?)" );
if (! $stmt ) {
printf ( "Prepare failed: %s\n" , maxdb_error ( $link ));
}
maxdb_stmt_bind_param ( $stmt , 's' , $result );
maxdb_stmt_execute ( $stmt );
printf ( "%s\n" , $result );
maxdb_stmt_close ( $stmt );
?>
以上例程的输出类似于:
a
Example #5 面向对象风格 (extended syntax)
<?php
$maxdb = new maxdb ( 'localhost' , 'MONA' , 'RED' , 'DEMODB' );
if ( maxdb_connect_errno ()) {
printf ( "Connect failed: %s\n" , maxdb_connect_error ());
exit();
}
$maxdb -> query ( "CREATE TABLE temp.mycity LIKE hotel.city" );
$maxdb -> query ( "INSERT INTO temp.mycity SELECT * FROM hotel.city" );
$stmt = $maxdb -> prepare ( "INSERT INTO temp.mycity VALUES (?, ?, ?)" );
$arr = array();
$stmt -> bind_param ( 'iss' , $arr );
$arr [ 0 ] = 11111 ;
$arr [ 1 ] = 'Georgetown' ;
$arr [ 2 ] = 'NY' ;
$stmt -> execute ();
printf ( "%d Row inserted.\n" , maxdb_stmt_affected_rows ( $stmt ));
$arr [ 0 ] = 22222 ;
$arr [ 1 ] = 'New Orleans' ;
$arr [ 2 ] = 'LA' ;
$stmt -> execute ();
printf ( "%d Row inserted.\n" , $stmt -> affected_rows );
$stmt -> close ();
$result = $maxdb -> query ( "SELECT * from temp.mycity WHERE zip = '11111' OR zip = '22222'" );
if ( $result ) {
while ( $row = $result -> fetch_row ()) {
printf ( "%s %s %s\n" , $row [ 0 ], $row [ 1 ], $row [ 2 ]);
}
}
$maxdb -> query ( "DELETE FROM temp.mycity WHERE name='Georgetown'" );
$maxdb -> query ( "DELETE FROM temp.mycity WHERE name='New Orleans'" );
printf ( "%d Rows deleted.\n" , $maxdb -> affected_rows );
$maxdb -> close ();
?>
以上例程的输出类似于:
1 Row inserted. 1 Row inserted. 11111 Georgetown NY 22222 New Orleans LA 2 Rows deleted.