bindParam和bindValue和bindColumn

本文介绍了PDO预处理语句中的占位符,包括问号和:name形式,并详细解析了bindParam与bindValue的区别。bindParam是引用传递,执行execute前不取值,而bindValue是值传递,执行前已赋值。bindColumn则用于在查询后将列值绑定到变量,便于遍历获取数据。

先说预处理语句中的占位符

两种形式:

  • 使用问号占位符
  • 使用:name占位符

而bindParam与bindValue就是为绑定占位符的值准备的方法

两个方法参数相同

  • 参数1:你要绑定的参数名称
  • 参数2:值
  • 参数3:值类型

使用问号占位符绑定值

$sql = "insert into users (name,age) value (?,?)";
bindParam(1,$name,PDO::PARAM_STR);//这里的1就是第一个问号
/*bindValue跟bindParam相同*/

使用:name占位符绑定值

$sql = "insert into users (name,age) value (:name,:age)";
bindParam(':name',$name,PDO::PARAM_STR);//这里的:name就是SQL语句中的:name
/*bindValue跟bindParam相同*/

建议使用:name的形式
因为如果你的参数较多,或者传入的参数变动,你如果使用问号的形式,则得到SQL语句中去一个一个数是第几个,很麻烦

上面说了用法,下面是bindParam与bindValue的区别

区别1:

  • bindParam:绑定一个参数到指定变量名,(简单理解:你的占位符名称就是你实际传递的变量的别名)
    • bindParam只能传递变量,不能书写直接量,他是引用传递,
    • 例如你把变量A绑定进去,实际上你的占位符和你的变量A的引用是同一个
  • bindValue:绑定一个值到参数中,(简单理解:你传递的变量,他会将值取出然后传递给你的参数,如果是直接量,则直接赋值给参数)
    • bindValue可以传递变量,可以书写直接量,他是值传递

区别2:

  • bindParam:在执行execute之前,是不进行取值的
    • 也就是说,你在执行execute之前改变传递的变量的值,在SQL语句查询时,会受到影响
  • bindValue:在执行execute之前,进行取值
    • 只要执行了bindValue方法,则值已经被传递进去了,在bindValue之后改变传递的变量的值,是不起作用的

bindColumn

在执行查询语句之后,是【依次】将列的值绑定到一个变量中,通过fetch函数遍历取出

例如:一列共有2行

name
小明
小红
  • bindColumn('name',$userName); 绑定name列到$userName变量中
  • 在你后续的fetch循环取数据的时候,$userName这个变量保存的就是每一行的数据
  • 例如第一次循环:$nameUser的值是:小明
  • 那么第二次循环:$nameUser的值是:小红

代码示例:


$sql = "select name,age from users";

$stmt = $pdo->prepare($sql);

$stmt->execute();

$stmt->bindColumn('name',$name);
//或者也可以这么写:
$stmt->bindColumn(1,$name);

while($stmt->fetch()){
	echo 'name中的值依次是:' . $name;
	echo '<br/>';
}

/*如果表结构与上面的那个表一样,那么,循环将输出,小明和小红*/


echo '一共查询了:' . $stmt->columnCount() . '列;';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值