2014-02-07 44 views
-1

我运行一个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); 

如何优化这个编码防止任何错误?

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

+0

不要练习使用mysql_了,它不知何故被弃用。 – witherwind

回答

0

这意味着该查询是越野车,为什么,很可能是因为您使用来源的组件构建它,你不真正检查足够的。 buggy语句抛出一个错误(因为没有结果可以被计算)。该错误返回为false而不是mysql结果资源。由于您不检查查询是否成功,但盲目尝试从结果中检索详细信息,因此会出现第二个错误。

所以有事情你必须投资于:

  1. 你应该总是检查如果查询成功可言: 附上您的查询条件:if (FALSE!==($result=$this->db->execute($sql)))只有从检索如果该条件解决为true,则结果会重新输入。

  2. 确保你确实(真的)检查全部用于构造查询的输入数据。在这里检查也意味着编码并正确地将其转义,也可参见第4点。

  3. 在这样的情况下,重要的是要分析什么究竟是哪里出了问题。 猜测什么可能会出错。因此,除了检查查询是否成功(1.)之外,如果不是这种情况,还应该查看mysql抛出的错误消息。为此,请使用方法mysql_error()。正如其他功能一样,它也有很好的文档记录。

  4. 你应该修改你的代码,并从旧的,不推荐使用的mysql扩展迁移到mysqliPDO。这两个都是php扩展,提供更多的安全性来构建buggy语句。阅读有关“准备的语句”和“参数绑定”。