Php 使用预先准备好的语句从上到下使用数组输入更新整个列,而不使用id信息
我在DB中有两个表格用于我的文章: 文章 标签 标记表结构和当前状态: “我的标签”表的主键是“标签列” 我想在任何INSERT new post或update existing post操作之后更新count列,我想用准备好的语句来完成这项操作 目前,我可以动态构造输入:$array=array2,4,4,2,这是要更新的count列的相关值 和以下代码;我试图更新count列,但是对于所有计数行,count始终更新为值=2 我没有任何警告/错误。 MySQL版本:5.5 我必须用$array[0]更新第一个计数行,用$array[1]更新第二个计数行。。。所以我必须利用极限,偏移参数 我了解到MySQL不允许在更新查询中使用偏移量 我无法编写复杂的查询,我搜索了SO并找到了Q&A: 在我看来,我从问答中使用的sql在逻辑上适合我的情况,但我不理解sql。 我不能100%确定问题的领域是sql。 我想更正我的代码并了解它失败的原因 你能帮忙吗 致意 我的代码Php 使用预先准备好的语句从上到下使用数组输入更新整个列,而不使用id信息,php,mysqli,sql-update,prepared-statement,offset,Php,Mysqli,Sql Update,Prepared Statement,Offset,我在DB中有两个表格用于我的文章: 文章 标签 标记表结构和当前状态: “我的标签”表的主键是“标签列” 我想在任何INSERT new post或update existing post操作之后更新count列,我想用准备好的语句来完成这项操作 目前,我可以动态构造输入:$array=array2,4,4,2,这是要更新的count列的相关值 和以下代码;我试图更新count列,但是对于所有计数行,count始终更新为值=2 我没有任何警告/错误。 MySQL版本:5.5 我必须用$array
$query = "UPDATE tags SET count = ?
WHERE tag IN(SELECT tag FROM (SELECT tag FROM tags LIMIT ?,1) as u)";
$stmt = $mysqli->prepare($query);
if($stmt === false)
{
trigger_error('SQL Error: ' . $mysqli->error, E_USER_ERROR);
}
$stmt->bind_param("ii", $count, $i);
$i = 0;
foreach ($array as $a) // $array: related values of the `count` column to be updated
{
$count = intval($a);
$stmt->execute();
$i = $i + 1;
}
$stmt->close();
你能得到/创建一个带有相关标签值的数组来配合你在PHP中的计数数组吗?我没有,但是我想,是的,如果你是指数组a=>2,b=>4。。。是的,没错。然后你可以循环并构建一个类似这样的查询:我的工作计算机上的站点被阻止了,但我会在家里使用它。非常感谢您的朋友,最后,您对我的解决方案失败的原因有何评论?SQL或者你考虑的其他可疑的点?你知道吗,我没有很仔细地看,甚至没有看到前额。我打赌如果你把你的绑定参数移到foreach里面,它可能会工作。
$query = "UPDATE tags SET count = ?
WHERE tag IN(SELECT tag FROM (SELECT tag FROM tags LIMIT ?,1) as u)";
$stmt = $mysqli->prepare($query);
if($stmt === false)
{
trigger_error('SQL Error: ' . $mysqli->error, E_USER_ERROR);
}
$stmt->bind_param("ii", $count, $i);
$i = 0;
foreach ($array as $a) // $array: related values of the `count` column to be updated
{
$count = intval($a);
$stmt->execute();
$i = $i + 1;
}
$stmt->close();