检查有效的 MySQL 结果资源

问题描述 投票:0回答:7

我有这个代码:

$rows = array();
$res = mysql_query($someQuery);

if(!mysql_errno())
    while($row = mysql_fetch_assoc($res))
        $rows[] = $row;

$someQuery
是我写入表单的任意查询。当我编写一个有错误的 mysql 查询时,mysql_errno 会捕获这种情况。但是,我刚刚发现,当我执行“Delete from table_name”查询时,它当然不是错误,但同时 mysql_fetch_assoc 失败并显示“警告:mysql_num_rows():提供的参数不是有效的 MySQL 结果”资源位于 /blah/blah/file.php 第 x 行”。

我试图在手册中查找它(也许我只是盲目......)但是有一个函数我可以用来检查 $res 是否是有效的 MySQL 结果资源?

php mysql resultset
7个回答
7
投票

if ($res)
应该可以很好地检查它是否是资源。 is_resource() 将确定其是否是有效资源。

您还可以检查 mysql_affected_rows 来尝试确定它是否是插入/更新/等


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.
}

0
投票

也许只需将条件更改为:

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

如果没有行,条件将失败,@将抑制警告。


0
投票

如果您通过

mysql_query
插入、更新、删除或删除,那么它只会返回
true
false
(取决于操作是否成功)。

我不确定您期望此实例中的资源包含什么?

如果需要受影响的行数,可以使用

mysql_affected_rows()


0
投票

这是我的函数,根据今天的标准 mysqli。

function is_mysql_resource( $db_conn = null )
{
    $MASK = preg_match( "/mysql/i", mysqli_get_client_info( $db_conn ) ) === 1 ? 1 : 0;
    $MASK |= mysqli_get_client_version( $db_conn ) > 0 ? 2 : 0;
    $MASK |= strlen( trim( mysqli_get_server_info( $db_conn ) ) ) > 0 ? 4 : 0;
    $MASK |= mysqli_thread_id( $db_conn ) > 0 ? 8 : 0;
    return $MASK == 15 ? 1 : 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.