使用 PHP PDO 显示 bindParam 的值

Posted

技术标签:

【中文标题】使用 PHP PDO 显示 bindParam 的值【英文标题】:Display value of bindParam using PHP PDO 【发布时间】:2011-04-09 01:16:58 【问题描述】:

有没有一种简单的方法来回显存储在绑定参数中的值。

$sql ="call storedproc(:firstname, :lastname)";
$stmt = $this->DBH->prepare($sql);
$stmt->bindParam(':firstname', $fname);
$stmt->bindParam(':lastname', $lname);

//I want to do this
echo $stmt->firstname;
$stmt->execute;

【问题讨论】:

【参考方案1】:

如果你只想“看看”发生了什么,那么PDOStatement->debugDumpParams():

将准备好的语句包含的信息直接转储到输出中。它将提供正在使用的 SQL 查询、使用的参数数量 (Params)、参数列表,以及它们的名称、类型 (paramtype) 作为整数、它们的键名或位置、值和查询中的位置(如果 PDO 驱动程序支持,否则为 -1)。

【讨论】:

需要注意的是,目前这个函数不会打印存储在 params 中的值而不应用 php Bug #52384 bugs.php.net/…的补丁。 上面的引用已经在php手册中更新了。从中删除的“价值”,最重要的部分...... :-(【参考方案2】:
<?php 
    function parms($string,$data) 
        $indexed=$data==array_values($data);
        foreach($data as $k=>$v) 
            if(is_string($v)) $v="'$v'";
            if($indexed) $string=preg_replace('/\?/',$v,$string,1);
            else $string=str_replace(":$k",$v,$string);
        
        return $string;
    

    $string='INSERT INTO stuff(name,value) VALUES (?,?)';
    $data=array('Fred',23);

    $string='INSERT INTO stuff(name,value) VALUES (:name,:value)';
    $data=array('name'=>'Fred','value'=>23);

    print parms($string,$data);

    $update = "update registration";
    $update .= " set status=:statusid";     
    $update .= " where refid=:refid";               
    $stmt = $db->prepare($update);

    $data=array('statusid' => $statusid,'refid' => $refid);
    echo parms($update,$data); // checking bind values
    exit; 

    $stmt->execute(array ('statusid' => $statusid,'refid' => $refid));
?>

//输出

update registration set status='all' where refid='45'

【讨论】:

以上是关于使用 PHP PDO 显示 bindParam 的值的主要内容,如果未能解决你的问题,请参考以下文章

PHP PDO::bindParam() 数据类型.. 它是如何工作的?

PHP PDO 与 bindParam 与 bindValue? [复制]

PHP PDO bindParam() 和 MySQL BIT

用于“IN”语句的变量/字符串的 PHP PDO bindParam...? [复制]

pdo中bindParam()与bindValue的区别

PHP扩展PDO MySQL之PDOStatement::bindParam vs bindValue