欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别

程序员文章站 2023-03-26 10:21:45
pdostatement::bindparam — 绑定一个参数到指定的变量名。 绑定一个php变量到用作预处理的sql语句中的对应命名占位符或问号占位符。 不同于 pd...

pdostatement::bindparam — 绑定一个参数到指定的变量名。

绑定一个php变量到用作预处理的sql语句中的对应命名占位符或问号占位符。 不同于 pdostatement::bindvalue() ,此变量作为引用被绑定,并只在 pdostatement::execute() 被调用的时候才取其值。

pdostatement::bindvalue — 把一个值绑定到一个参数。

绑定一个值到用作预处理的 sql 语句中的对应命名占位符或问号占位符。

复制代码 代码如下:

<?php
$stm = $pdo->prepare("select * from users where user = :user");
$user = "jack";
//正确
$stm->bindparam(":user",$user);
//错误
$stm->bindparam(":user","jack");
//正确
$stm->bindvalue(":user",$user);
//正确
$stm->bindvalue(":user","jack");
 
//所以使用bindparam是第二个参数只能用变量名,而不能用变量值,而bindvalue至可以使用具体值。
?>

pdostatement::bindcolumn — 绑定一列到一个 php 变量。

安排一个特定的变量绑定到一个查询结果集中给定的列。每次调用 pdostatement::fetch() 或 pdostatement::fetchall() 都将更新所有绑定到列的变量。

复制代码 代码如下:

<?php
function  readdata ( $dbh ) {
    $sql  =  'select name, colour, calories from fruit' ;
    try {
        $stmt  =  $dbh -> prepare ( $sql );
        $stmt -> execute ();
 
        /*  通过列号绑定  */
        $stmt -> bindcolumn ( 1 ,  $name );
        $stmt -> bindcolumn ( 2 ,  $colour );
 
        /*  通过列名绑定  */
        $stmt -> bindcolumn ( 'calories' ,  $cals );
 
        while ( $row  =  $stmt -> fetch ( pdo :: fetch_bound )) {
            $data  =  $name  .  "\t"  .  $colour  .  "\t"  .  $cals  .  "\n" ;
            print  $data ;
        }
    }
    catch ( pdoexception $e ) {
        print  $e -> getmessage ();
    }
}
readdata ( $dbh );
?>