我正在将一些值插入到mysql数据库中,在插入之前,我想检查其中一个输入字段是否具有在允许插入之前已存在于数据库中的值。
当我运行脚本时,我收到此错误:
警告:mysql_num_rows():提供的参数不是有效的MySQL结果资源
错误指向我的PHP中的这一行:
if(mysql_num_rows($result) > 0)
这是PHP:
$qry = "SELECT * FROM videos WHERE tape_no='$tape_no'";
$result = $dbLink->query($qry) or die (mysql_error());
if($result) {
if(mysql_num_rows($result) > 0)
{
echo '<html>';
echo '<head>';
echo '<link href="/module.css" rel="stylesheet type="text/css" />';
echo '</head>';
echo '<body>';
echo '<h1>Error</h1>';
echo '<h3>The Tape Number That You Have Entered is a Duplicate, Please Choose Another Tape Number</h3>';
echo '<FORM><INPUT TYPE="BUTTON" class="bluebutton" VALUE="Go Back" ONCLICK="history.go(-1)"></FORM>';
echo '</body>';
echo '</html>';
}
@mysql_free_result($result);
}
我引用的列是否需要具有某种数据类型(即整数)? varchar列类型是否可以在这里工作?
答案 0 :(得分:3)
PHP附带两个不同的 MySQL特定的API扩展:
mysql_query()
); MySQLi,支持OO风格(mysqli::query()
)和程序风格(mysqli_query()
);
还有供应商非特定的抽象层,例如PDO。
警告:mysql_num_rows():提供的参数不是有效的MySQL结果资源
嗯,这不是一个。
if(mysql_num_rows($result) > 0)
期望$result
是通过MySQL系列函数获得的结果资源。
但是,在您的代码中,它很可能是其他扩展程序的结果。除非你写了一些漏洞抽象层,否则你要混合两个不同的扩展名!
(mysql_free_result($result)
会遇到同样的问题。请阅读您正在使用的扩展程序的文档。)
如果使用MySQLi,请尝试:
if ($result->num_rows > 0)
如果使用PDO,请尝试:
if ($result->rowCount > 0)
答案 1 :(得分:0)
我认为你混合了两种不同的mysql资源。因为你没办法使用
$result = $dbLink->query($qry)
收到mysql
结果集(mysql_*
不支持OOP)。这是我在PDO中的表现
$query = "SELECT * FROM videos WHERE tape_no='$tape_no'";
$stmt = $db->query($query);
if (!$stmt) { throw new Exception("Query was not complete."); }
if ($stmt->rowCount > 0) {
//Good Stuff
}