1

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

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

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

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

我能做些什么来避免这种情况?有没有一种简单的方法可以简单地禁止显示此错误消息?还是一个简单的“if”语句可以阻止 SQL 查询首先发生?

4

7 回答 7

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这样的框架可以帮助您。使用它的活动记录类很容易,而且它本身可以处理很多事情。

于 2012-06-19T19:23:50.000 回答
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 注入持开放态度。学习在PDO 中使用准备好的查询来避免这个问题。

于 2012-06-19T19:24:38.050 回答
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) {...}是关键。

于 2012-06-19T19:25:28.067 回答
2

抑制这个错误的一个简单方法是在mysql_query和mysql_num_rows之前加上一个@,但不建议这样做,你应该做一个适当的错误处理

于 2012-06-19T19:24:15.077 回答
1

$result如果您在运行查询时出错,则为假,因此在尝试使用它之前检查一下:

if $result === false)
{
     // stuff went boom!
}
于 2012-06-19T19:24:05.323 回答
1

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

更新

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

更新 2

这是错误控制运算符的文档

于 2012-06-19T19:24:06.593 回答
0
if( !is_resource($result) )

参见手册is_resource()

于 2012-06-19T19:24:38.630 回答