我有一个简单的脚本来检查用户上传了多少文件:
$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查询首先发生?
答案 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);
。
正如其他地方所述(特别是对此答案的评论),除非你知道自己在做什么,否则不应该压制错误。
答案 6 :(得分:0)
if( !is_resource($result) )