Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用预先准备好的语句从上到下使用数组输入更新整个列,而不使用id信息_Php_Mysqli_Sql Update_Prepared Statement_Offset - Fatal编程技术网

Php 使用预先准备好的语句从上到下使用数组输入更新整个列,而不使用id信息

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

我在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。 我想更正我的代码并了解它失败的原因

你能帮忙吗

致意

我的代码

$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();