【问题标题】:PHP form to update string, always returns successPHP表单更新字符串,总是返回成功
【发布时间】:2015-10-06 07:49:42
【问题描述】:

我正在尝试使用 php 表单来更新 sql 数据库。

花了几个小时后,我终于能够更新数据库,但问题是即使找不到与字符串匹配的行,它仍然返回消息“更新数据成功”。我检查了数据库,没有输入其他条目,但我真的想让用户在他们输入错误的 id 时知道。

谢谢

if (isset($_POST['update'])) {
    $dbhost = 'localhost';
    $dbuser = 'user';
    $dbpass = 'password';
    $conn = mysql_connect($dbhost, $dbuser, $dbpass);

    if (! $conn ) {
        die('Could not connect: ' . mysql_error());
    }

    $UniqueID = mysql_real_escape_string($_POST['UniqueID']);
    $Referral = mysql_real_escape_string($_POST['Referral']);

    mysql_select_db('database');

    $sql = "UPDATE tablename set Referral = '$Referral' WHERE ID = '$UniqueID'"; 

    $retval = mysql_query( $sql, $conn );

    if(! $retval ) {
        die('Could not update data: ' . mysql_error());
    } else {
        echo "Updated data successfully\n";
    }

   mysql_close($conn);
}

谢谢

【问题讨论】:

  • 你应该改用mysqli
  • @CodeGodie 特别是在 PHP 7 中删除了 mysql 扩展。

标签: php sql forms


【解决方案1】:

您可以通过以下方式检查$retval = mysql_query( $sql, $conn );之后是否发生任何错误

if (mysql_error()) print 'Update Failed, Incorrect id';

【讨论】:

    【解决方案2】:

    这是因为不更改任何行的更新不是失败。这只是一个没有更改/发现/影响任何行的查询。

    您需要改为检查mysql_affected_rows()

    例如

    $result = mysql_query(...);
    if ($result === false) {
        die(mysql_error()); // something blew up completely
    } else if (mysql_affected_rows() == 0) {
        ... nothing was changed
    }
    

    sql 中的故障是由于语法错误、通信错误或“元”错误(如违反约束)造成的。一个空的结果集是一个完全有效的结果集,它恰好是空的。

    【讨论】:

    • 谢谢,在发布此帖子几分钟后偶然发现了另一个有此建议的帖子。几个小时前没找到。为类似的帖子道歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2016-12-16
    • 2019-07-25
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多