我有这段代码:
$rows = array();
$res = mysql_query($someQuery);
if(!mysql_errno())
while($row = mysql_fetch_assoc($res))
$rows[] = $row;
$someQuery
是我写入表单的任意查询。当我编写一个包含错误的mysql查询时,mysql_errno捕获了这种情况。但是,我刚刚发现,当我执行“从table_name删除”查询时,它当然不是错误,但同时mysql_fetch_assoc失败并出现“警告:mysql_num_rows():提供的参数不是有效的MySQL结果第x行上的/blah/blah/file.php中的资源。
我试图在手册中查找它(也许我只是盲目...)但是有一个函数可以用来检查$ res是否是一个有效的MySQL结果资源?
答案 0 :(得分:7)
if ($res)
应该可以正常工作以检查它是否是一种资源。 is_resource()将确定它是否是有效的资源。
您还可以检查mysql_affected_rows以确定它是否为INSERT / UPDATE / etc
答案 1 :(得分:3)
与is_resource()
一起,您可以使用get_resource_type()
来检查它是否是MySQL资源。
$res_type = is_resource($res) ? get_resource_type($res) : gettype($res);
if(strpos($res_type, 'mysql') === false) {
echo 'Invalid resource type: ' . $res_type;
}
get_resource_type()
可能会返回"mysql link"
或"mysql link persistent"
,具体取决于您的连接类型。
答案 2 :(得分:2)
mysql_query()
会返回true
或false
,因此您可以这样检查:
if($res) {
// The query succeeded.
}
答案 3 :(得分:2)
检查http://www.lampdocs.com/blog/2010/10/how-to-check-that-a-php-variable-is-a-mysql-resource/以获取解决方案。希望这可以帮助。
答案 4 :(得分:0)
如果您通过mysql_query
进行INSERT,UPDATE,DELETE或DROP,那么它只会返回true
或false
(取决于操作是否成功)。
我不确定您希望资源在此实例中包含什么内容?
如果您需要受影响的行数,可以使用mysql_affected_rows()
。
答案 5 :(得分:0)
或许只是将条件改为:
if(!mysql_errno() && @mysql_num_rows($res) > 0)
如果没有行,条件将失败,@将禁止警告。