无法使用PHP删除MySQL记录

时间:2012-09-01 17:03:48

标签: php mysql

对于严厉措辞的标题,我不知道还有什么可以称之为这种情况。

这是我的困境,为了好玩,我正在制作一个小小的装备,这样人们就可以提交战地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为true,即使它是错误的,也让我感到困惑的是即使秘密和验证都正确,条目也不会从MySQL数据库中删除。

旧版本可以正常工作。这就是令我困惑的事情。

我用于检查成功的相同方法(if (mysql_query($sql))在插入时工作得很好,如果它失败了,实际上会给我反馈,但出于某种原因,当我尝试删除记录时它总是报告成功。

如果有人可以帮助我,我真的很感激。

请注意:我是PHP / MySQL的新手,所以请原谅。

2 个答案:

答案 0 :(得分:2)

来自This post

  即使查询实际上没有删除任何内容,

mysql_query也将返回TRUE。

因此,您将始终从删除查询中获得...

归功于Paolo

答案 1 :(得分: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;
    }
}

?>