6

我有这个代码:

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

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

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

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

4

6 回答 6

7

if ($res)应该可以正常检查它是否是资源。 is_resource()将确定它是否是有效的资源。

您还可以检查mysql_affected_rows以尝试确定它是否是 INSERT/UPDATE/etc

于 2009-04-23T19:14:42.917 回答
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"取决于您的连接类型。

于 2011-07-09T15:17:53.147 回答
2

mysql_query()返回true左右false,您可以这样检查:

if($res) {
    // The query succeeded.
}
于 2009-04-23T19:15:30.200 回答
2

检查http://www.lampdocs.com/blog/2010/10/how-to-check-that-a-php-variable-is-a-mysql-resource/以获得解决方案。希望这可以帮助。

于 2010-10-15T10:11:45.873 回答
0

如果您通过 INSERT、UPDATE、DELETE 或 DROPmysql_query那么它只会返回truefalse(取决于操作的成功)。

我不确定您期望资源在这种情况下包含什么?

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

于 2009-04-23T19:14:40.153 回答
0

也许只需将条件更改为:

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

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

于 2009-04-23T19:21:33.850 回答