本文作者:心月

PDO绑定参数的其他方法

心月IT博客 2019-03-29
PDO绑定参数的其他方法摘要:在《PDO中预处理语句占位符的使用​》已经介绍了参数绑定方法bindParam(),冒号‘:’占位符和问号‘?’都可以使用这个方法绑定参数,而且还可以指定绑定参数的类型,再次确保在执行sql中传入参数的安全性。PDO扩展中,除了bindParam()方法外,还有其它的方法也可以绑定参数。

    在《PDO中预处理语句占位符的使用》已经介绍了参数绑定方法bindParam(),冒号‘:’占位符和问号‘?’都可以使用这个方法绑定参数,而且还可以指定绑定参数的类型,再次确保在执行sql中传入参数的安全性。PDO扩展中,除了bindParam()方法外,还有其它的方法也可以绑定参数。


1、bindValue()方法绑定参数

bindValue()和bindParam()一样,都属于PDOStatement对象中的方法。该方法也是把一个值绑定到一个参数。bindValue()同样有3个参数

PDOStatement::bindValue ( mixed $parameter , mixed $value [, int $data_type = PDO::PARAM_STR ] ) : bool

执行成功时返回 TRUE, 或者在失败时返回 FALSE。

parameter
参数标识符。对于使用命名占位符的预处理语句,应是类似 :name 形式的参数名。对于使用问号占位符的预处理语句,应是以1开始索引的参数位置。
value
绑定到参数的值
data_type
使用 PDO::PARAM_* 常量明确地指定参数的类型。

bindValue()方法使用示例

<?php 
header('content-type:text/html;charset=utf-8');
try{
	$pdo=new PDO('mysql:host=localhost;dbname=test','root','root');	
	$sql="INSERT test_pdo(username,password,email) VALUES(?,?,?)";
	$stmt=$pdo->prepare($sql);	
	$username='testuser111';
	$password='123456';
	$email='testuser11@qq.com';
	$stmt->bindValue(1,$username,PDO::PARAM_STR);
	$stmt->bindValue(2,$password,PDO::PARAM_STR);
	$stmt->bindValue(3,$email);
	$stmt->execute();
	//再次绑定参数执行
	$username='testuser222';
	$password='123456';
	$email='testuser22@qq.com';
	$stmt->bindValue(1,$username,PDO::PARAM_STR);
	$stmt->bindValue(2,$password,PDO::PARAM_STR);
	$stmt->bindValue(3,$email);
	$stmt->execute();
	echo $stmt->rowCount();
}catch(PDOException $e){
	echo $e->getMessage();
}

bindValue()方法绑定参数

从bindValue()的使用示例来看再对比前文bindParam(),这两个方法使用方法似乎一样,既然如此为什么会有两个方法呢?请看下面的图:

bindValue()方法绑定参数

通过这两个图,可以明显的发现,bindValue()方法是先给参数然后绑定参数最后执行,而且每次执行execute()前都需要再次绑定参数,而bindParam()方法则没有这个顺序问题,也无需再次绑定参数,在给定参数之前或者之后都不会报错。


2、bindColumn()方法绑定参数

bindColumn() 绑定一列到一个 PHP 变量

安排一个特定的变量绑定到一个查询结果集中给定的列。这个方法绑定的是结果集

PDOStatement::bindColumn ( mixed $column , mixed &$param [, int $type [, int $maxlen [, mixed$driverdata ]]] ) : bool

执行成功时返回 TRUE, 或者在失败时返回 FALSE。

参数说明

column
结果集中的列号(从1开始索引)或列名。如果使用列名,注意名称应该与由驱动返回的列名大小写保持一致。
param
将绑定到列的 PHP 变量名称
type
通过 PDO::PARAM_* 常量指定的参数的数据类型。
maxlen
预分配提示。
driverdata
驱动的可选参数。

下面通过具体的示例来理解bindColumn()方法

<?php 
header('content-type:text/html;charset=utf-8');
try{
	$pdo=new PDO('mysql:host=localhost;dbname=test','root','root');	
	$sql="select username,password,email from test_pdo where id<20";
	$stmt=$pdo->prepare($sql);	
	$stmt->execute();

	$stmt->bindColumn(1,$username);
	$stmt->bindColumn(2,$password);
	$stmt->bindColumn(3,$email);
	//绑定参数后需要用fetch(PDO::FETCH_BOUND)来获取结果集
	while ($stmt->fetch(PDO::FETCH_BOUND)) {
		echo '用户名:'.$username.'-密码:'.$password.'-邮箱'.$email.'<br>';
	}
}catch(PDOException $e){
	echo $e->getMessage();
}

bindColumn()绑定结果集


文章版权及转载声明:

本文由 心月IT技术博客 博主整理于 2019-03-29
若转载请注明原文及出处:https://www.xinyueseo.com/other/218.html

分享到:
赞(
发表评论
快捷输入:

验证码

    评论列表 (有 1 条评论,人围观)参与讨论
    网友昵称:心月IT博客网友
    心月IT博客网友游客2020-10-30回复
    密码密文是用mysql函数生成的吗