Php MySQL更新查询(PDO)莫名其妙地不工作
我一直在一个网站上工作,最近添加了一些更改,尽管我试图对所说的更改进行评论,但我的更新查询不起作用-我一直在试图弄清楚为什么在过去的3个小时里没有用Php MySQL更新查询(PDO)莫名其妙地不工作,php,mysql,pdo,Php,Mysql,Pdo,我一直在一个网站上工作,最近添加了一些更改,尽管我试图对所说的更改进行评论,但我的更新查询不起作用-我一直在试图弄清楚为什么在过去的3个小时里没有用 if (isset($_POST['submit'])) { if (count($rated)<$_SESSION['id']) { $difference = $_SESSION['id'] - count($rated); $rated = implode(',',$rated);
if (isset($_POST['submit']))
{
if (count($rated)<$_SESSION['id'])
{
$difference = $_SESSION['id'] - count($rated);
$rated = implode(',',$rated);
while ($difference >= 0)
{
$rated .= "0,";
$difference--;
}
$rated = explode(',',$rated);
}
$rated[$_SESSION['id']] = $_POST['rating'];
$ratings = 0;
$ratingsadded = 0;
foreach ($rated as $user => $rating)
{
if ($rating != 0)
{
$query = $db->prepare("SELECT id, active FROM accounts WHERE id = :id");
$query->execute(array('id' => $user));
$useractive = $query->fetch();
if ($useractive['active'] == 1 || $user == 0 || $user == 50)
{
$ratings++;
$ratingsadded += $rating;
}
else
{
$rated[$user] = 0;
}
}
}
$ratingtotal = $ratingsadded / $ratings;
$query = $db->prepare("UPDATE accounts SET rating = :rating, rated = :rated WHERE id = :id");
$query->execute(array('rating' => $ratingtotal, 'rated' => implode(",",$rated), 'id' => $user['id']));
header('Location: ?user=' . $_GET['user']);
}
if(isset($\u POST['submit']))
{
如果(计数($额定)=0)
{
$rated.=“0”;
美元差额--;
}
$rated=爆炸(',',$rated);
}
$rated[$\u SESSION['id']=$\u POST['rating'];
$ratings=0;
$ratingsadded=0;
foreach($user=>$rating)
{
如果($rating!=0)
{
$query=$db->prepare(“选择id,从id=:id的帐户中活动”);
$query->execute(数组('id'=>$user));
$useractive=$query->fetch();
如果($useractive['active']==1 | |$user==0 | |$user==50)
{
$ratings++;
$ratingsadded+=$rating;
}
其他的
{
$rated[$user]=0;
}
}
}
$ratingtotal=$ratingsadded/$ratings;
$query=$db->prepare(“更新帐户集评级=:评级,评级=:评级,其中id=:id”);
$query->execute(数组('rating'=>$ratingtotal,'rated'=>introde(“,”,$rated),'id'=>$user['id']);
标题('Location:?user='.$\u GET['user']);
}
注意:最后的查询就是我所指的查询
第二点注意:我知道我的代码中有很多低效的地方
完整代码:我想你应该这样写你的execute
$query->execute(array(':rating' => $ratingtotal, ':rated' => implode(",",$rated), ':id' => $user['id']));
注意:在每个命名参数前面。参考资料:我想你应该这样写你的execute
$query->execute(array(':rating' => $ratingtotal, ':rated' => implode(",",$rated), ':id' => $user['id']));
注意:在每个命名参数前面。参考资料:虽然Rajdeep删除了他的答案,但我打算用以下内容回应: 非常感谢,虽然您的答案有点不正确,但它指出了我的问题-我使用$user作为foreach键值和查询结果 我发现了这个问题,这是一个简单的愚蠢行为,将变量置于其他变量之上
我很抱歉让您费尽心思来帮助我。虽然Rajdeep删除了他的答案,但我打算回答以下问题: 非常感谢,虽然您的答案有点不正确,但它指出了我的问题-我使用$user作为foreach键值和查询结果 我发现了这个问题,这是一个简单的愚蠢行为,将变量置于其他变量之上
很抱歉,让您费尽心思来帮助我完成此任务。否,
:
在命名参数前面不是必需的,它是可选的。看到这个答案,谢谢你的回答,但是,我总是写这样的查询,它们总是有效的。@RajdeepPaul在“非常罕见”的情况下,我看到了冒号需要使用的位置,这取决于一些服务器配置。@Fred ii-哦,我明白了。服务器的默认/自定义配置可以在该场景中发挥作用。谢谢你指出,我会调查的。@RajdeepPaul不客气。正如我所说,这是“非常罕见的”,但它确实时常发生。这是为了记住堆栈上的几个问题。不,:
在命名参数前面不是必需的,它是可选的。看到这个答案,谢谢你的回答,但是,我总是写这样的查询,它们总是有效的。@RajdeepPaul在“非常罕见”的情况下,我看到了冒号需要使用的位置,这取决于一些服务器配置。@Fred ii-哦,我明白了。服务器的默认/自定义配置可以在该场景中发挥作用。谢谢你指出,我会调查的。@RajdeepPaul不客气。正如我所说,这是“非常罕见的”,但它确实时常发生。这是为了记住在堆栈上提出的几个问题。似乎这会起作用,我的笔记本电脑刚刚崩溃,所以我现在重新启动它,以便进行测试。我删除了我的评论。我可以看到您在foreach
循环中使用了$user
作为数组索引,所以执行语句没有问题。@Rajdeep请参考我的答案,非常感谢。这似乎可以工作,我的笔记本电脑刚刚崩溃,我现在重新启动它以便进行测试。我删除了我的评论。我可以看到您在foreach
循环中使用了$user
作为数组索引,所以执行语句没有问题。@Rajdeep请参阅我的答案,非常感谢。是的,这就是我上面的评论。很高兴您的问题得到了解决。:-)是的,这就是我上面的评论。很高兴您的问题得到了解决。:-)