Почему я получаю эту ошибку SQL? - PullRequest
0 голосов
/ 24 февраля 2012

Я пытаюсь проверить, есть ли совпадение формы в моей базе данных. вот мой 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 ]

1 голос
/ 24 февраля 2012

Потому что ваш запрос не удался.

php.net / mysql-query : "Для операторов SELECT, SHOW, DESCRIBE, EXPLAIN и других, возвращающих набор результатов, mysql_query () возвращает ресурс в случае успеха или FALSE в случае ошибки."

Попробуйте:

$result=mysql_query($sql) or die(mysql_error());
1 голос
/ 24 февраля 2012

Поскольку, как и многие, многие другие здесь, код слепо предполагает, что запрос выполнен успешно, и все в порядке.Проверяйте наличие ошибок после каждой операции.Большинство функций возвращают false, когда они терпят неудачу.

0 голосов
/ 24 февраля 2012

Я думаю, что ответ лежит в фигурных скобках:

$sql="SELECT * FROM $tbl_name WHERE door ='{$door}' AND postcode='{$postcode}' AND active = 'not_activated' AND ref = '". $_SESSION['ref']."'";
$result=mysql_query($sql);
0 голосов
/ 24 февраля 2012

Вам нужно сделать две вещи:

  1. Узнайте, что такое ошибка MySQL, как уже предлагалось

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

  2. Вам необходимо очистить все, что входит в запрос. Хотя вы дезинфицируете $ door и $ postcode, вы не дезинфицируете $_SESSION['ref']. Вы должны и запустить его через mysql_real_escape_string(). Я не знаю, что вы храните в нем, но, возможно, именно здесь код нарушается из-за неэкранированных символов?

Теоретически я предполагаю, что $ _SESSION хранится на стороне сервера, но лично я все равно не буду доверять ему, и я бы избежал всего, что входит в запрос MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...