都能跟得上
function BindParameters($array,$query) {
$st = $this->dbc->prepare($query);
if (is_array($array) && count($array)>0) {
foreach ($array as $key=> $row) {
if (isset($row['type'])) {
$var_type = $row['type'];
} else {
$var_type = '';
}
$var_value = &$row['val'];
if ($var_type=='int') {
$var_type = PDO::PARAM_INT;
} else if ($var_type=='string') {
$var_type = PDO::PARAM_STR;
} else if ($var_type=='null') {
$var_type = PDO::PARAM_NULL;
} else {
$var_type = PDO::PARAM_STR;
}
$st->bindParam(':'.$key,$var_value,$var_type);
}
}
$st->execute();
return $st;
}
谢谢,这个解决方案是不好的。这是不方便和容易出错的。
是的,有运行规则查询一个更好的解决方案:
只要有你的数据在阵列这样
$array['city'] = $city;
$array['city_id'] = $city_id;
,然后直接发送到:
$query = "update cities set city=:city where city_id=:city_id";
$pdo->prepare($query)->execute($array);
这是全部您需要运行此查询的代码,不需要笨拙的函数。
只要你保留PDO::ATTR_EMULATE_PREPARES
为false
,这种方法不会给你带来任何麻烦。
对于常规的SQL查询,你永远不需要bindParam()
nor it's third parameter。
因此,启用此功能,因为这
function run($query, $array = NULL) {
$st = $this->dbc->prepare($query);
$st->execute($array);
return $st;
}
您可以随时把参数作为'执行阵列()'。 – frz3993
我首选bindParam(),以防我需要放入data_type参数 – petran
在这种情况下,循环是唯一的方法。 – frz3993