php - 更新表错误?(SQLSTATE[HY000]:一般错误)
问题描述
我目前收到此错误
[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";
任何帮助深表感谢。我以前没有遇到过这个错误,所以我不知道从哪里开始。它确实通过并更新了表格
解决方案
您$query
通过在 UPDATE 查询上重用它来破坏您的句柄,因此 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";
推荐阅读
- css - 在 CSS Grid 中自动跨越项目宽度
- python - 比较python中的两列并在第一个表中返回匹配项
- r - 按条件从长格式数据集中提取特定行/采用长格式数据进行生存分析
- android - Android 生成调试 apk 它正在我的设备上运行,但在其他设备上它已安装但它永远不会打开
- javascript - 无法在 javascript 中使用 fetch 发送大负载
- powershell - 在 IE 上使用 powershell 保存文件绕过下载弹出窗口
- javascript - 当用户单击按钮时从数组中删除对象
- python - 在 Coder (Psychopy) 中实现一个心理物理学楼梯类
- python - 将输入的值保存在 textInput 中并在重新启动我的应用程序后显示它
- symfony - 在块主题中使用附加变量