我目前收到此错误
[31-Aug-2018 15:50:46 America/New_York] PHP Fatal error: Uncaught
exception 'PDOException' with message 'SQLSTATE[HY000]: General error'
in /home/crysuicn/public_html/products.php:22
Stack trace:
#0 /home/crysuicn/public_html/products.php(22): PDOStatement->fetch(2)
#1 {main}
thrown in /home/crysuicn/public_html/products.php on line 22
第 22 行是:
while($row = $query->fetch(PDO::FETCH_ASSOC)){
因此错误可能在这里的某个地方,但我不知道错误可能是什么。
if(isset($_SESSION["discount"])){
if($_SESSION["discount"] != "na"){
$sql = "SELECT users FROM discounts WHERE name=:promo";
$query = $st->prepare($sql);
$query->execute(array(
'promo' => $name
));
if($query->rowCount()>0){
while($row = $query->fetch(PDO::FETCH_ASSOC)){
if(!empty($row["users"])){
$usedips = $row["users"];
$usedips = $usedips.", ".$_SERVER["REMOTE_ADDR"];
}else{
$usedips = $_SERVER["REMOTE_ADDR"];
}
$sql = "UPDATE discounts SET users=:updatedips WHERE name=:name";
$query = $st->prepare($sql);
$query->execute(array(
'updatedips' => $usedips,
'name' => $name
));
}
}
}
}
$_SESSION["discount"] = "na";
非常感谢任何帮助。我以前没有遇到过这个错误,所以我不知道从这里该去哪里。 它确实会遍历并更新表格
最佳答案
您通过在 UPDATE 查询中重用 $query
句柄来破坏它,从而导致 while 循环被破坏。
因此,请使用另一个变量作为 UPDATE 中使用的语句句柄。
最好准备一次查询并多次重复使用它,只需替换变量即可。这允许数据库仅编译和优化查询一次,但可以多次运行它。它对您的脚本来说更快,并且对数据库造成的不必要的负载更少。
if(isset($_SESSION["discount"])){
if($_SESSION["discount"] != "na"){
$sql = "SELECT users FROM discounts WHERE name=:promo";
$query = $st->prepare($sql);
$query->execute(array('promo' => $name));
if($query->rowCount()>0){
// prepare once use many times
$sql = "UPDATE discounts
SET users=:updatedips WHERE name=:name";
$stmt= $st->prepare($sql);
while($row = $query->fetch(PDO::FETCH_ASSOC)){
if(!empty($row["users"])){
$usedips = $row["users"];
$usedips = $usedips.", ".$_SERVER["REMOTE_ADDR"];
}else{
$usedips = $_SERVER["REMOTE_ADDR"];
}
$stmt->execute(array('updatedips' => $usedips,'name' => $name));
}
}
}
}
$_SESSION["discount"] = "na";
关于php - 更新表错误? (SQLSTATE[HY000] : General error),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52121933/