php - 更新表错误? (SQLSTATE[HY000] : General error)

标签 php mysql

我目前收到此错误

[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/

相关文章:

php - 更新后台数据库和网站

php - PHP 'PHP_SELF' 问题

php - LIKE 查询中的数字通配符?

php Mysql 联合表中准备好的查询出现问题

asp.net - 从一个文件导入另一个文件

php - MYSQL 合并来自 Picklist 数组的条件更新

php - 使用ajax完成我的搜索输入

php - Symfony 2/Doctrine - 始终可用的数据库连接?

php - 制作权限系统的有效方法是什么?

php - 如何将 DOMNodeList 对象转换为数组