您的位置:首页 > 编程语言 > PHP开发

php中mysql参数绑定详解

2014-10-17 17:23 531 查看
参数绑定详解
CDbCommand表示一个针对数据库执行的SQL语句,CDbCommand支持SQL语句预处理和参数绑定。 调用
bindParam 去绑定一个PHP变量到SQL中的一个参数。 调用
bindValue 去绑定一个值到一个SQL参数。 当绑定一个参数时,此SQL语句将自动准备好。 也可以调用prepare去明确的准备一条SQL语句。

参数形式:

1、 普通绑定
以变量命名的占位符:
<?php

/* Execute a prepared statement by binding PHP variables */

$calories = 150;

$colour = 'red';

$sth = $dbh->prepare('SELECT name, colour, calories

FROM fruit

WHERE calories < :calories AND colour = :colour');

$sth->bindParam(':calories', $calories, PDO::PARAM_INT);

$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);

$sth->execute();

?>
未标记的占位符:
<?php

/* Execute a prepared statement by binding PHP variables */

$calories = 150;

$colour = 'red';

$sth = $dbh->prepare('SELECT name, colour, calories

FROM fruit

WHERE calories < ? AND colour = ?');

$sth->bindParam(1, $calories, PDO::PARAM_INT);

$sth->bindParam(2, $colour, PDO::PARAM_STR, 12);

$sth->execute();

?>

2、 使用循环的方式绑定参数时,参数绑定的是地址不是值
正确:
<?php
foreach($params as $key => &$val) {
$sth->bindParam($key, $val);
}
?>
失败:($val by value, because bindParam needs&$variable):
<?php
foreach ($params as $key => $val) {
$sth->bindParam($key, $val);
}

3、 like绑定
错误:
"SELECT* FROM `users` WHERE `firstname` LIKE '%:keyword%'";
没有%时"SELECT * FROM `users` WHERE`firstname` LIKE :keyword";
这样是可以的
如果有%那么必须先将$keyword ="%".$keyword."%";
命名为另一个变量然后在绑定就可以。
例如:

备注:以上变量占位符与?占位符不能混用,否则会报错。
4、 in的绑定方案
在in包含数据是整数时,

例如这一个,返回的数据只有25相关的,只提取了第一个,之前的数据。
所以在绑定in时,需要将in里面的每一个变量单独绑定才能真实的出现所需完整数据。

利用的是?占位符的无命名性来先统计数据个数,然后在循环绑定。所以in中的数据必须是每一个都能实体的数据。
绑定普通字符串时:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: