gpt4 book ai didi

php - 如何在 PDO 中绑定(bind)当前列值?

转载 作者:行者123 更新时间:2023-11-29 08:32:30 25 4
gpt4 key购买 nike

我的网络应用程序中有一个功能,其中表格是“快速编辑”的,也就是说,可以直接编辑其单元格。当用户保存更改时,客户端将更改的行、更改的列(不包括未更改的列,只是为了澄清)及其相应的 ID 发送到服务器。

为了有效地执行UPDATE查询,我使用了PDO的准备语句功能。这是我目前提出的等效声明:

UPDATE table
SET
col1 = :arg_col1,
col2 = :arg_col2,
col3 = :arg_col3
WHERE
ID = :arg_ID

然后我遇到了这个问题,我无法将列设置为其当前值。因为只提交了一行中已编辑的列,所以我只需将数据绑定(bind)到各自的列。例如,如果仅更改 col1col2,则生成的语句应为

UPDATE table
SET
col1 = 'new data',
col2 = 'an edit',
col3 = col3 /* Use the current value of the column */
WHERE
ID = 153454

直接修改语句肯定会抵消使用相同准备好的语句更新多行所带来的性能提升。遗憾的是,PDO 似乎没有将列绑定(bind)到其当前值的选项。

我该如何解决这个问题?

<小时/>

附加:出于性能原因,我不想发送所有列。

最佳答案

不幸的是,您想要的方法实际上不会起作用。您无法在一次调用中准备一条语句,然后在所有后续调用中使用它 - 您每次都必须再次准备它。
因此,创建通用查询是没有意义的。因此,您可以为特定数据集创建自定义查询。后一个任务可以自动化:只需动态创建 UPDATE 语句即可。

基于 tag wiki 的解决方案(滚动到最底部):

// first, have your update data in array (you can omit this line though)
$update = $_POST;

// next, list all fields a user allowed to
$allowed = array("col1","col2","col3");

// finally, create a SET statement query dynamically
$set = pdoSet($fields,$values, $update);

// voila - your query contains only fields were POSTed:
$sql = "UPDATE users SET $set WHERE id = :id";
$stm = $dbh->prepare($sql);

// just add an ID and execute
$values["id"] = $_POST['id'];
$stm->execute($values);

关于php - 如何在 PDO 中绑定(bind)当前列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16208035/

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