我有这个代码:
$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 结果资源?
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"
,具体取决于您的连接类型。
也许只需将条件更改为:
if(!mysql_errno() && @mysql_num_rows($res) > 0)
如果没有行,条件将失败,@将抑制警告。
如果您通过
mysql_query
插入、更新、删除或删除,那么它只会返回true
或false
(取决于操作是否成功)。
我不确定您期望此实例中的资源包含什么?
mysql_affected_rows()
。
这是我的函数,根据今天的标准 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;
}