我正在尝试查看表单到我的数据库是否匹配。这是我的PHP代码:
<?php
$host="localhost"; // Host name
$username="****"; // Mysql username
$password="*****"; // Mysql password
$db_name="*****"; // Database name
$tbl_name="public"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$door=$_POST['door'];
$postcode=$_POST['postcode'];
// To protect MySQL injection (more detail about MySQL injection)
$door = stripslashes($door);
$postcode = stripslashes($postcode);
$door = mysql_real_escape_string($door);
$postcode = mysql_real_escape_string($postcode);
$sql="SELECT * FROM $tbl_name WHERE door ='$door' AND postcode='$postcode' AND active = 'not_activated' AND ref = '". $_SESSION['ref']."'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1){
header("location:securityquestion.php");
}
?>
我得到的错误信息如下:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/jahedhus/public_html/system/checkdetails.php on line 36
第36行是$ count = mysql_num_rows($ result);
我在这里做错了什么?
答案 0 :(得分:1)
因为,就像许多其他人一样,代码盲目地假设查询成功,一切都很好。每次操作后检查错误。大多数函数在失败时返回false。
答案 1 :(得分:1)
因为您的查询失败了。
php.net/mysql-query:“对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()会在成功时返回资源,如果出错则返回FALSE。”
试试这个:
$result=mysql_query($sql) or die(mysql_error());
答案 2 :(得分:0)
你需要做两件事:
找出MySQL错误是什么,如已建议
$result=mysql_query($sql) or die(mysql_error());
您需要清理查询中的所有内容。虽然您清理$ door和$ postcode,但您不会清理$_SESSION['ref']
。您应该通过mysql_real_escape_string()
运行它。我不知道你在里面存放了什么,但是由于未转义的字符,代码可能会破坏?
从理论上讲,我认为$ _SESSION存储在服务器端,但我个人仍然不相信它,并且我将逃避进入MySQL查询的所有内容。
答案 3 :(得分:0)
我认为答案在于花括号:
$sql="SELECT * FROM $tbl_name WHERE door ='{$door}' AND postcode='{$postcode}' AND active = 'not_activated' AND ref = '". $_SESSION['ref']."'";
$result=mysql_query($sql);