我运行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);
如何优化此编码以防止出现任何错误?
它有什么问题吗?我应该忽略这个错误吗?
答案 0 :(得分:0)
这意味着查询是错误的,为什么呢,很可能是因为你使用来自你没有真正检查的源的组件来构造它。错误语句会抛出错误(因为无法计算结果)。该错误以false
而不是mysql结果ressource的形式返回。由于您不检查查询是否成功但是盲目地尝试从结果中检索详细信息,因此会出现第二个错误。
所以你必须投入四个的东西:
您应该始终检查查询是否成功:
将您的查询包含在条件:if (FALSE!==($result=$this->db->execute($sql)))
中,并且只有在条件解析为true
时才从结果资源中检索。
确保您确实(真的!)检查用于构建查询的所有输入数据。在这里检查也意味着正确编码和转义它,也见第4点。
在这种情况下,重要的是分析究竟是什么出错了。 猜测 可能出错的意义不大。因此,除了检查查询是否成功(1.)之外,如果不是这样,您还应该查看mysql抛出的错误消息。使用方法mysql_error()
。与其他所有功能一样,它也有详细记录。
您应该重新编写代码并从phps旧的,已弃用的mysql扩展程序迁移到mysqli
或PDO
。两者都是PHP扩展,提供更多的安全性来防止构造错误的语句。阅读“预备语句”和“参数绑定”。