如何抑制“不是一个有效的MySQL结果资源”错误

时间:2012-06-19 19:20:55

标签: php mysql sql suppress-warnings error-suppression

我有一个简单的脚本来检查用户上传了多少文件:

$sql = "SELECT * from $username where file IS NOT NULL";
$result = mysql_query($sql);
$count=mysql_num_rows($result);

如果表$ username没有任何文件不为null的行,则会吐出:

“警告:mysql_num_rows():提供的参数不是...中的有效MySQL结果资源”

我该怎么做才能避免这种情况?是否有一种简单的方法可以简单地禁止显示此错误消息?或者一个简单的“if”语句,它可以阻止SQL查询首先发生?

7 个答案:

答案 0 :(得分:6)

你可以这样做:

<?php
 $sql = "SELECT * from $username where file IS NOT NULL";
 $result = mysql_query($sql);
 if($result) 
 {
     $count=mysql_num_rows($result);
 }
 else 
 {
     $count = 0;
  }

或使用速记:

<?php 
 $count = ($result) ? mysql_num_rows($result) : 0;

注意:

就像你在其他评论中看到的那样,这只是你问题的答案,一次解决一个问题。在这里使用$ username可能很棘手,特别是如果它是动态或用户生成的内容。最好看看你与数据库交互方式的一些长期改进,但现在是修复; - )

PS。 如果你不想学习所有新东西,也许是一个框架,像Codeigniter这样的东西可以帮助你。使用它active record class很容易,它本身可以处理很多事情。

答案 1 :(得分:4)

压制错误是您要做的最后一件事。你应该处理它们。

$sql = 'SELECT * FROM ' . mysql_real_escape_string($username) . ' WHERE `file` IS NOT NULL';
$result = mysql_query($sql);

if ($result !== false) {
    $count=mysql_num_rows($result);
} else {
    // An error occurred, handle it here.
}

此外,您使用动态表名称也很可怕。不要这样做!

此外,您可能对SQL注入持开放态度。了解use prepared queries with PDO以避免此问题。

答案 2 :(得分:3)

以最简单的方式,您可以mysql_query($sql) or die("invalid sql");或尝试/捕捉。

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
if (!mysql_select_db('database_name')) {
    die('Could not select database: ' . mysql_error());
}
$result = mysql_query('SELECT name FROM work.employee');
if (!$result) {
    die('Could not query:' . mysql_error());
}
echo mysql_result($result, 2); // outputs third employee's name

mysql_close($link);
?>

我认为http://www.php.net/manual/en/function.mysql-result.php上面的代码说明了你的需要。

此处,if (!$result) {...}是关键。

答案 3 :(得分:2)

一种简单的方法来抑制这个错误就是在mysql_query和mysql_num_rows之前放一个@,但是不推荐,你应该做出正确的错误处理

答案 4 :(得分:1)

如果您在运行查询时出错,则

$result将为false,因此请在尝试使用之前检查:

if $result === false)
{
     // stuff went boom!
}

答案 5 :(得分:1)

您可以尝试使用@符号。所以你对mysql_query的调用现在看起来像这样:$result = @mysql_query($sql);

更新

正如其他地方所述(特别是对此答案的评论),除非你知道自己在做什么,否则不应该压制错误。

更新2

以下是Error Control Operators

的文档

答案 6 :(得分:0)

if( !is_resource($result) )

请参阅the manual on is_resource()