[英]Updating table error? (SQLSTATE[HY000]: General error)
我目前收到此錯誤
[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";
您正在回收變量名並破壞循環。 重命名內部“查詢”,或者在使用它時以不同的方式進行結構化:
$select = $st->prepare("SELECT users FROM discounts WHERE name=:promo");
$select->execute(array(
'promo' => $name
));
$update = $st->prepare("UPDATE discounts SET users=:updatedips WHERE name=:name");
if ($select->rowCount() > 0) {
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
if(!empty($row["users"])){
$usedips = $row["users"];
$usedips = $usedips.", ".$_SERVER["REMOTE_ADDR"];
} else {
$usedips = $_SERVER["REMOTE_ADDR"];
}
$update->execute(array(
'updatedips' => $usedips,
'name' => $name
));
}
}
只要有可能,請為變量提供有意義的上下文名稱。 $query
通常太含糊。
加上有效使用准備好的語句:准備一次,並在必要時執行多次。
看起來您正在用逗號分隔值的列中,這對於關系數據庫是一個大問題。 而是在此處創建適當的一對多關系。 通過理解適當的數據庫規范化背后的想法,嘗試避免違反零,一或無窮規則 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.