我有一个简单的脚本来检查用户上传了多少文件:
$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查询发生?
你可以做这样的事情:
<?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可能很棘手,尤其是当它是动态内容或用户生成的内容时。最好看看与数据库交互方式的一些长期改进,但现在这是修复程序;-)
附言。如果你不想学习所有新的东西,也许是一个框架,像Codeigniter这样的东西可以帮助你。使用它的活动记录类很容易,它自己可以处理很多事情。
抑制错误是您要做的最后一件事。 你应该处理它们。
$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 配合使用,以避免此问题。
以最简单的方式,您可以执行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) {...}
是关键。
抑制此错误的一种简单方法是在mysql_query和mysql_num_rows之前放置@,但不建议这样做,您应该进行适当的错误处理
如果您在运行查询时遇到错误,$result
将为 false,因此在尝试使用它之前请检查它:
if $result === false)
{
// stuff went boom!
}
试试@
符号。 因此,您对mysql_query的调用现在看起来像这样:$result = @mysql_query($sql);
.
更新
正如在其他地方所说(特别是作为对这个答案的评论),除非你知道自己在做什么,否则你不应该抑制错误。
更新 2
以下是错误控制运算符的文档
if( !is_resource($result) )
请参阅有关is_resource()
的手册。