检查有效的MySQL结果资源

时间:2009-04-23 19:09:13

标签: php mysql resultset

我有这段代码:

$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结果资源?

6 个答案:

答案 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()会返回truefalse,因此您可以这样检查:

if($res) {
    // The query succeeded.
}

答案 3 :(得分:2)

答案 4 :(得分:0)

如果您通过mysql_query进行INSERT,UPDATE,DELETE或DROP,那么它只会返回truefalse(取决于操作是否成功)。

我不确定您希望资源在此实例中包含什么内容?

如果您需要受影响的行数,可以使用mysql_affected_rows()

答案 5 :(得分:0)

或许只是将条件改为:

if(!mysql_errno() && @mysql_num_rows($res) > 0)

如果没有行,条件将失败,@将禁止警告。