我遇到了这个mysqli_fetch_assoc()错误,这让我疯了。 问题是我试图检查数据库中是否存在匹配整数ID的行。如果存在,则应删除该记录,否则,应显示未找到记录的警告。 问题是它显示的警告是找不到记录但同时它从数据库中删除了该行。我已直接在表中检查了数百次并且记录存在。 我试图用pdo而不是mysqli来做这件事,但我得到同样的东西。
$id = intval($_GET['id']);
$qp = $dbh->query("SELECT * FROM Pictures WHERE ID = " . $id) or die ('SQL error on line ' . __LINE__ . ' in ' . __FILE__);
$rp = $qp->fetch_assoc();
if (is_null($rp)) {
display_alert('danger', 'Photo not found!');
} else {
$horse = get_horse_info($rp['HorseID']);
if (is_null($horse)) {
display_alert('danger', 'Horse not found!');
} else {
$ownership = is_owner($horse['ID'], $user['ID']);
if ($ownership < 1) {
display_alert('danger', 'Permission denied! Only horse owners can delete photos!');
} else {
if (file_exists(ABS_PATH . '/upload/' . $rp['Image'])) {
@unlink(ABS_PATH . '/upload/' . $rp['Image']);
}
$dbh->query("DELETE FROM Pictures WHERE ID = " . $rp['ID']) or die ('SQL error on line ' . __LINE__ . ' in ' . __FILE__);
display_alert('success', 'Success: photo deleted!');
redirect_page('/?path=horses&action=display&id=' . $horse['ID'], 2);
}
}
}
OR(先计算行数)
$id = intval($_GET['id']);
$qp = $dbh->query("SELECT * FROM Pictures WHERE ID = " . $id) or die ('SQL error on line ' . __LINE__ . ' in ' . __FILE__);
$cp = $qp->num_rows;
if ($cp == 0) {
display_alert('danger', 'Photo not found!');
} else {
$rp = $qp->fetch_assoc();
$horse = get_horse_info($rp['HorseID']);
if (is_null($horse)) {
display_alert('danger', 'Horse not found!');
} else {
$ownership = is_owner($horse['ID'], $user['ID']);
if ($ownership < 1) {
display_alert('danger', 'Permission denied! Only horse owners can delete photos!');
} else {
if (file_exists(ABS_PATH . '/upload/' . $rp['Image'])) {
@unlink(ABS_PATH . '/upload/' . $rp['Image']);
}
$dbh->query("DELETE FROM Pictures WHERE ID = " . $rp['ID']) or die ('SQL error on line ' . __LINE__ . ' in ' . __FILE__);
display_alert('success', 'Success: photo deleted!');
redirect_page('/?path=horses&action=display&id=' . $horse['ID'], 2);
}
}
}
他们都在做同样的事情:删除记录但显示警告(显示“未找到照片”)
请帮助,这让我疯了,我无法专注于其他任何事情。我坚持这个。数以百计的啤酒为您服务! 干杯!
P.S。:我通常和mysqli一起工作,但这次我尝试过PDO,PDO也是如此。
$id = intval($_GET['id']);
$qp = $pdo->prepare("SELECT * FROM Pictures WHERE ID = " . $id);
$qp->execute();
$rp = $qp->fetch(PDO::FETCH_ASSOC);
if (is_null($rp)) {
display_alert('danger', 'Photo not found!');
} else {
$horse = get_horse_info($rp['HorseID']);
if (is_null($horse)) {
display_alert('danger', 'Horse not found!');
} else {
$ownership = is_owner($horse['ID'], $user['ID']);
if ($ownership < 1) {
display_alert('danger', 'Permission denied! Only horse owners can delete photos!');
} else {
if (file_exists(ABS_PATH . '/upload/' . $rp['Image'])) {
@unlink(ABS_PATH . '/upload/' . $rp['Image']);
}
$del->prepare("DELETE FROM Pictures WHERE ID = " . $rp['ID']);
$del->execute();
display_alert('success', 'Success: photo deleted!');
redirect_page('/?path=horses&action=display&id=' . $horse['ID'], 2);
}
}
}
答案 0 :(得分:1)
最可能的原因是双重HTTP请求(您以某种方式发送两个HTTP请求而不是一个)。检查服务器日志,您可能会找到表单提交的两个条目。
它可能是JavaScript中的错误,甚至鼠标发送双击而不是单击,或者只是双击。
所以你应该防止双击。例如,请参阅this帖子。