如何禁止“不是有效的MySQL结果资源”错误
我有一个简单的脚本来检查用户上传了多少文件:
$sql = "SELECT * from $username where file IS NOT NULL";
$result = mysql_query($sql);
$count=mysql_num_rows($result);
如果表$用户名没有任何行,其中文件不为空它将吐出:
“警告: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在这里的使用可能会非常棘手,特别是如果它是动态或用户生成的内容。 最好看一下与数据库交互方式的一些长期改进,但现在是解决方案;-)
PS。 如果你不想学习所有新的东西,也许是一个框架,像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) {...}
是关键字。
上一篇: How to suppress "is not a valid MySQL result resource" errors