gpt4 book ai didi

带有 bindParam 与 bindValue 的 PHP PDO?

转载 作者:可可西里 更新时间:2023-11-01 13:39:06 25 4
gpt4 key购买 nike

<分区>

解决方案

改变这个:

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 );
}

问题

我有以下代码,它没有给出任何错误,但它没有执行我需要它执行的操作:

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" />

数据库会更新,但如果我按如下方式选中复选框:

示例复选框状态

cb_1 = 1
cb_2 = 1
cb_3 = 0

数据库中的每一列都得到 0

如果我按如下方式选中复选框:

示例复选框状态

cb_1 = 0
cb_2 = 0
cb_3 = 1

数据库中的每一列都得到 1

有人知道如何解决这个问题吗?

可能是因为 bindParam 绑定(bind)了实际变量 $value(通过引用),我认为在循环结束时,它的值基于 $_POST['cb_3']?

所以我认为我应该使用 bindValue?但不确定如何......我已经检查了文档,但发现它令人困惑。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com