都能跟得上
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