0

抱歉标题措辞不好,我不知道还能称呼这种情况。

这是我的困境,为了好玩,我正在制作一个小玩意儿,这样人们就可以提交战地 3 服务器的名称、平台和位置,这样他们就不再需要依赖口耳相传了。

这个旧代码工作正常,它删除记录并完成它的工作。

<?php

mysql_connect('localhost', 'root', 'pass');
mysql_select_db('database');

$server_secret = mysql_real_escape_string($_POST['secret_initial']);
$server_confirm = mysql_real_escape_string($_POST['secret_verify']);

if ($server_secret == $server_confirm) {
    echo "Both matched.";
    if ((strlen($server_secret) < 6) and (strlen($server_verify) < 6)) {
        echo "Password too short.";
    } else {
        echo "Password is of proper length.";
        $sql = "DELETE FROM `servers` WHERE secret='" . sha1($server_secret) . "'";
        mysql_query($sql) or die("Couldn't delete record. " . mysql_error());
    }
} else {
    echo "Mismatch.";
}

?>

但是,如果我使用这个:

<?php

mysql_connect('localhost', 'root', 'pass');
mysql_select_db('database');

// Create variables from form
$server_secret = mysql_real_escape_string($_POST['secret_initial']);
$server_confirm = mysql_real_escape_string($_POST['secret_verify']);

// Check for verification
if ($server_secret == $server_confirm) {
    // Delete from database
    $sql = "DELETE FROM `servers` WHERE secret='" . sha1($server_secret) . "'";
    if (mysql_query($sql) or die("Couldn't delete record. " . mysql_error()) {
        $success = true;
    } else {
        $success = false;
    }
}

?>

它总是将 $success 报告为真,即使它是假的,而且让我感到困惑的是,即使秘密和验证都正确,该条目也没有从 MySQL 数据库中删除。

旧版本虽然工作正常。这就是让我感到困惑的地方。

我用于检查成功的相同方法if (mysql_query($sql)

如果有人可以在这里帮助我,我将不胜感激。

请注意:我是 PHP/MySQL 的新手,请见谅。

4

2 回答 2

2

这篇文章

即使查询实际上没有删除任何内容,mysql_query 也会返回 TRUE。

所以你总是会从删除查询中得到真实的..

归功于保罗

于 2012-09-01T17:16:38.483 回答
1

这是因为查询在语法上是正确的,所以永远不会出错。相反,您想查找实际受影响的行数:

<?php

mysql_connect('localhost', 'root', 'pass');
mysql_select_db('database');

// Create variables from form
$server_secret = mysql_real_escape_string($_POST['secret_initial']);
$server_confirm = mysql_real_escape_string($_POST['secret_verify']);

// Check for verification
if ($server_secret == $server_confirm) {
    // Delete from database
    $sql = "DELETE FROM `servers` WHERE secret='" . sha1($server_secret) . "'";
    $result = mysql_query($sql);
    if (mysql_affected_rows($result)) {
        $success = true;
    } else {
        $success = false;
    }
}

?>
于 2012-09-01T17:07:47.023 回答