php - mysql字段数据更改时出现"mysql_fetch_assoc()"错误

标签 php mysql

我有一个 mySQL 数据库,我通过 PHP 从中获取一些数据。

这就是我所拥有的:

if ($db_found) {

    $URL_ID = $_GET["a"];

    $SQL = "SELECT * FROM tb_employees WHERE URL_ID = $URL_ID";
    $result = mysql_query($SQL);

    while ($db_field = mysql_fetch_assoc($result)) {
        $firstname = $db_field['firstname'];
        $surname = $db_field['surname'];
        $function = $db_field['function'];
        $email = $db_field['email'];
        $telnr = $db_field['telnr'];
    }

    mysql_close($db_handle);
}
else {
    print "Database not found... please try again later.";
    mysql_close($db_handle);
}

在本例中,我的 mySQL 数据库中的 URL_ID 字段为 001。当我访问 www.mydomain.com/index.php?a=001 时,它会获取所有数据,将其放入变量中,然后我可以回显变量没有任何问题。

现在,我想更改 URL_ID,我已在 mySQL 数据库中将其更改为“62ac1175”。但是,当我继续访问 www.mydomain.com/index.php?a=62ac1175 时,我收到以下错误消息:

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in mydomain.com\db_connect.php on line 17

mySQL 中的字段以 varchar(8) 作为类型,以 utf8_general_ci 作为排序规则。

如果我将条目更改回 001 并将 URL 更改为 ?a=001,它会再次正常工作。

出了什么问题?

最佳答案

您没有在查询中进行任何错误检查,因此如果查询失败,它就会中断也就不足为奇了。 manual on mysql_query() 中概述了如何添加正确的错误检查。或者在这个reference question.

示例:

$result = mysql_query($SQL);

if (!$result)
 { trigger_error("mySQL error: ".mysql_error());
   die(); }

您的查询正在中断,因为您没有将输入括在引号中。您可以仅对整数避免 * 引号(62ac1175 则不然)。尝试一下

$SQL = "SELECT * FROM tb_employees WHERE URL_ID = '$URL_ID'";

此外,您显示的代码容易受到 SQL injection 的攻击。使用库的正确清理方法(例如,对于您正在使用的经典 mysql 库,mysql_real_escape_string()),或者切换到 PDO 和准备好的语句。

在您的代码中,这看起来像这样:而不是

$URL_ID = $_GET["a"];

$URL_ID = mysql_real_escape_string($_GET["a"]);

* 但是,如果避免使用引号,mysql_real_escape_string() 将不起作用,您需要手动检查参数是否实际上是整数。

关于php - mysql字段数据更改时出现"mysql_fetch_assoc()"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9431230/

相关文章:

javascript - 每次提交注册表单时,如何将变量从数据库传递到 url

php - 删除mysql数据库所有表中的一条记录

php - 使用 PHP,尝试从 MySQL 数据库中选择一个特定的查询会给我所有的东西

php - 奇数/偶数脚本有问题

php - 调用ajax函数时找不到请求的URL

php - 什么在 SilverStripe 表单中生成 .holder-required 类

python sql查询说明 'not enough input arguments'

mysql - 匹配最佳正则表达式

php - 同一张表中项目的 N 到 N 关系

php - 使用 pdftk 将图像添加到 pdf