sql查询每次都失败

时间:2014-04-13 00:08:47

标签: php mysql sql

<html>
<head>
</head>
<body>
<form action="login_process.php" method="post">
SID: <input type="text" name="sid">
<br />
Password: <input type="text" name="pw">
<br />
<input type="submit" value="Login">
</form>
</body>
</html>

login_process.php文件enter image description here

<html>
<head>
</head>
<body>
<?php
include ("connection.php");

$sid = $_POST['sid'];
$pw = $_POST['pw'];

setcookie("username", "$sid". time()+86400);

$result = mysqli_query($con, "SELECT SID FROM student_table WHERE SID='$sid' and password='$pw'") or die('Query failed');


if(!$result){
    echo "Failed";
    } else {
        echo "success". $_COOKIE['username'];
        $_SESSION['username'] = $sid;
        }        
?>
</body>
</html>

我的student_table中有数据。但无论我给出什么样的输入都说成功。即使我没有任何输入点击登录按钮它仍然说成功。请帮忙。

3 个答案:

答案 0 :(得分:3)

在sql查询中分配值时应使用引号。

SELECT 
    SID 
FROM 
    student_table 
WHERE 
    SID = '$sid' and password = '$pw'

还期待准备好的语句以保护自己免受sql注入。您还应该添加以下代码来获取所选行:

while ($row = mysqli_fetch_array($result)) {
   $_SESSION['username'] = $row['SID'];
}

答案 1 :(得分:2)

开始学习基本调试:

如果查询失败,请执行以下操作:

不是运行它(mysql_query,或者mysqli_query或者你拥有的任何东西),而是ECHO它:

echo "SELECT SID FROM student_table WHERE SID='$sid' and password='$pw'";

提交表单后,您将看到运行的查询,转到phpmyadmin或您使用的任何内容并手动运行查询。看看是否有错误,也看看发生了什么更容易。当你像这样工作时建议,首先在phpmyadmin中尝试查询,然后在你确信它们没问题后将它们应用到代码中。

答案 2 :(得分:0)

这不是一个真正的答案,而是更多关于如何在代码无法正常工作时找出问题所在。

首先,始终将SQL放入变量中。为什么,所以你可以&#39; var_dump&#39;它,看看发生了什么。所以,试试这个:

$sql = "SELECT SID FROM student_table WHERE SID=$sid and password=$pw";

var_dump($sql, 'my_query'); // you will see what PHP created.

然后尝试提供的答案:

$sql = "SELECT 
    SID 
FROM 
    student_table 
WHERE 
    SID = '$sid' and password = '$pw'";

至少你会看到可能不正确的东西。

var_dump($sql, 'the answer_query'); // you will see what PHP created.

$ result = mysqli_query($ con,$ sql)或死亡(&#39;查询失败&#39;);

外部引号必须是&#34; (双引号)不是&#34; &#39; &#34; (单引号)这两者都是完全有效的PHP。前者允许在字符串中替换变量。     后者将eveything视为字符串。