为什么我会出现此SQL错误?

时间:2012-02-24 01:03:03

标签: php mysql phpmyadmin

我正在尝试查看表单到我的数据库是否匹配。这是我的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);

我在这里做错了什么?

4 个答案:

答案 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)

你需要做两件事:

  1. 找出MySQL错误是什么,如已建议

    $result=mysql_query($sql) or die(mysql_error());

  2. 您需要清理查询中的所有内容。虽然您清理$ door和$ postcode,但您不会清理$_SESSION['ref']。您应该通过mysql_real_escape_string()运行它。我不知道你在里面存放了什么,但是由于未转义的字符,代码可能会破坏?

  3. 从理论上讲,我认为$ _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);