MySQL查询错误验证

时间:2014-02-07 08:37:45

标签: mysql

我运行Mysql查询来选择一些数据,有时我会收到一个名为

的错误
mysql_fetch_assoc() expects parameter 1 to be resource, boolean given

当我执行以下代码时,

$result   = $this->db->execute($sql);
for ($i = 0; $data[$i + 1] = mysql_fetch_assoc($result); $i++);
array_pop($data);

如何优化此编码以防止出现任何错误?

它有什么问题吗?我应该忽略这个错误吗?

1 个答案:

答案 0 :(得分:0)

这意味着查询是错误的,为什么呢,很可能是因为你使用来自你没有真正检查的源的组件来构造它。错误语句会抛出错误(因为无法计算结果)。该错误以false而不是mysql结果ressource的形式返回。由于您不检查查询是否成功但是盲目地尝试从结果中检索详细信息,因此会出现第二个错误。

所以你必须投入四个的东西:

  1. 您应该始终检查查询是否成功: 将您的查询包含在条件:if (FALSE!==($result=$this->db->execute($sql)))中,并且只有在条件解析为true时才从结果资源中检索。

  2. 确保您确实(真的!)检查用于构建查询的所有输入数据。在这里检查也意味着正确编码和转义它,也见第4点。

  3. 在这种情况下,重要的是分析究竟是什么出错了。 猜测 可能出错的意义不大。因此,除了检查查询是否成功(1.)之外,如果不是这样,您还应该查看mysql抛出的错误消息。使用方法mysql_error()。与其他所有功能一样,它也有详细记录。

  4. 您应该重新编写代码并从phps旧的,已弃用的mysql扩展程序迁移到mysqliPDO。两者都是PHP扩展,提供更多的安全性来防止构造错误的语句。阅读“预备语句”和“参数绑定”。