我的代码会抛出搜索代码的警告。 警告是 SCREAM:忽略错误抑制 (!)警告:mysql_num_rows()期望参数1为资源,第15行的C:\ wamp \ www \ test \ search.php中给出布尔值
代码是
<html>
<head>
</head>
<body>
<?php
mysql_connect("localhost","root","") or die (mysql_error());
mysql_select_db("list") or die (mysql_error());
if(empty($_POST) === false)
{
$data=$_POST['criteria'];
$get=mysql_query('SELECT SRNO, fname, lname, phone, email, address, comments from names where fname='.$data);
if (mysql_num_rows($get)==0)
{
echo 'There are no search results!!';
}
else
{
echo '<table border=0 cellspacing=25 cellpadding=1>';
echo'<tr><th>Sr. No</th><th>First Name</th><th>Last Name</th><th>Phone No</th><th>E-mail</th><th>Address</th><th>Comments!!</th><th>Modify</th><th>Delete!</th></tr>';
while($get_row=mysql_fetch_assoc($get))
{
echo '<tr><td>'.$get_row['SRNO'].'</td><td>'.$get_row['fname'].'</td><td>'.$get_row['lname'].'</td><td>'.$get_row['phone'].'</td><td>'.$get_row['email'].'</td><td>'.$get_row['address'].'</td><td>'.$get_row['comments'].'</td><td><a href="index.php?edit='.$get_row['SRNO'].'">Edit</a></td><td><a href="index.php?delete='.$get_row['SRNO'].'">Delete</a></td></tr>';
}
echo '</table>';
}
/*
if(mysql_num_rows($getf) == 0)
{
$getel=mysql_query('SELECT SRNO, fname, lname, phone, email, address, comments from names where lname='.$_GET['$data']));
}*/
}
echo '<form action="" method="post">';
echo '<input type="text" name=criteria>';
echo '<input type="submit" value="search" name="submit">';
echo '</form>';
?>
</body>
</html>
答案 0 :(得分:1)
您的查询有问题。尝试:
$get = mysql_query("SELECT SRNO, fname, lname, phone, email, address, comments from names where fname = '" . mysql_real_escape_string($data) . "'");
需要在引号中包围fname
,因为它是一个字符串。
另外,你的脚本打开sql注入。您应该考虑使用PDO。
答案 1 :(得分:1)
那是因为你的sql失败而且$get
是假的。试试这个:
$get=mysql_query("SELECT SRNO, fname, lname, phone, email, address, comments from names where fname='" . mysql_real_escape_string($data) . "'");
请注意我还添加了mysql_real_escape_string
,当有人决定使用sql注入来攻击您的网站时,这会让您免于哭泣。此外,您应该考虑不使用mysql_ *函数并切换到预准备语句,因为这些函数已被弃用。
答案 2 :(得分:0)
函数mysql_query
在错误尝试时返回FALSE
if ($get) {
if (mysql_num_rows($get)==0) {
...
} else {
echo mysql_error();
}
答案 3 :(得分:0)
假设$get
是一个布尔值而且它是假的,那么mysql_query()
可能会返回false。
来自手册:http://php.net/manual/en/function.mysql-query.php
对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他语句返回 resultset,mysql_query()在成功时返回资源,或者返回FALSE 错误。
对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等, mysql_query()成功时返回TRUE,错误时返回FALSE。
返回的结果资源应该传递给mysql_fetch_array(), 以及用于处理结果表的其他函数,以访问 返回数据。
使用mysql_num_rows()来查找为a返回的行数 SELECT语句或mysql_affected_rows()来查找多少行 受到DELETE,INSERT,REPLACE或UPDATE语句的影响。
mysql_query()也会失败,如果用户没有,则返回FALSE 有权访问查询引用的表。