mysqli_fetch_assoc()最奇怪的错误

时间:2016-10-22 03:07:48

标签: javascript php

我遇到了这个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);
        }
    }       
}

1 个答案:

答案 0 :(得分:1)

最可能的原因是双重HTTP请求(您以某种方式发送两个HTTP请求而不是一个)。检查服务器日志,您可能会找到表单提交的两个条目。

它可能是JavaScript中的错误,甚至鼠标发送双击而不是单击,或者只是双击。

所以你应该防止双击。例如,请参阅this帖子。