SOLUTION帶有bindParam和bindValue的PHP PDO?
更改此:
foreach($fields as $dbfield => $field) {
$value = isset($_POST[$field]) ? 1 : 0;
$STH -> bindParam(':' . $dbfield, $value, PDO::PARAM_INT, 1);
}
這樣:
foreach($fields as $dbfield => $field) {
$value = isset($_POST[$field]) ? 1 : 0;
$STH -> bindValue(':' . $dbfield, $value, PDO::PARAM_INT);
}
問題
我有FOLL由於代碼,不給任何錯誤,但它不會做什麼,我需要它做的事:
PHP
$fields = array(
'db_col_1' => 'cb_1',
'db_col_2' => 'cb_2',
'db_col_3' => 'cb_3'
);
$parts = array();
foreach($fields as $dbfield => $field){
$parts[] = '`' . $dbfield . '` = :' . $dbfield;
}
$DBH = new PDO("mysql:host=localhost;dbname=db", "user", "pass");
$DBH -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//temp id
$id = 1;
$STH = $DBH -> prepare('UPDATE `table1` SET ' . join(', ', $parts) . ' WHERE `id`= :id');
$STH -> bindParam(':id', $id, PDO::PARAM_INT, 10);
foreach($fields as $dbfield => $field) {
$value = isset($_POST[$field]) ? 1 : 0;
$STH -> bindParam(':' . $dbfield, $value, PDO::PARAM_INT, 1);
}
$STH -> execute();
HTML
<input id="cb_1" name="cb_1" type="checkbox" value="cb_1" />
<br />
<input id="cb_2" name="cb_2" type="checkbox" value="cb_2" />
<br />
<input id="cb_3" name="cb_3" type="checkbox" value="cb_3" />
數據庫去更新,但如果我檢查複選框如下:
示例複選框STATES
cb_1 = 1
cb_2 = 1
cb_3 = 0
在db每一列得到0
。
如果我選中複選框如下:
樣品複選框STATES
cb_1 = 0
cb_2 = 0
cb_3 = 1
在db每一列得到1
。
任何人都知道如何解決這個問題?
難道是因爲bindParam
結合實際的可變$value
(通過引用),我認爲,通過循環結束,具有基於$_POST['cb_3']
一個值的時間?我想我應該使用bindValue
?但不知道如何..我檢查了文檔,但發現它令人困惑。
[標籤維基](http://stackoverflow.com/tags/pdo/info)在這個問題上包含一個建議 – 2013-03-01 09:27:17
我想你應該在問這裏之前試過'bindValue()'。 – Voitcus 2013-03-01 09:33:31