PHP数据检索数据库中的问题

时间:2011-04-03 20:23:26

标签: php sql database

好的,问题是...我的新手和我试图了解发生了什么。我通过html表单在数据库中使用POST发送这个数据(名称,电子邮件)。我理解它背后的逻辑除了什么基本上发生的是,每当我输入一个名字,任何名称,它都会回应else语句:“已经有一个具有该名称的用户”。它会在数据库中发回第一个名称。当什么都没有时,它什么都不发送。所以这是块:

 $query= "SELECT* from users where username='".$_POST['name']."'";
        $result = mysql_query($query);
        if (!$result){


        $query = "INSERT into users (username, email, password) values
        ('".$_POST["name"]."', '".$_POST["email"]."',  
        '".$passwords[0]."')";
        $result = mysql_query($query);

        if ($result){
            echo "It's entered!";
        } else {
            echo "There's been a problem: ".mysql_error();
        }
     } else {

         echo "There is already a user with that name: <br />";
        $sqlAll = "select * from users";
         $resultsAll = mysql_query($sqlAll);
         $row = mysql_fetch_array($resultsAll);
           while ($row) {

              echo $row["username"]." -- ".$row["email"]."<br />";

           $row = mysql_fetch_array($result);

5 个答案:

答案 0 :(得分:2)

您可能需要检查mysql_num_rows()而不是检查!$ result,我认为如果查询成功,您将获得资源,即使它包含零行。

您可能还想阅读:http://php.net/manual/en/security.database.sql-injection.php

答案 1 :(得分:2)

ESCAPEEEEE

首先,您需要了解逃避。 你有没有听说过Johnny DROP TABLES?

http://xkcd.com/327/

严肃的事业

它总是返回的原因是因为$ result中的响应实际上是资源数据类型。当铸造为布尔值时,这将永远是真的。 (因为你的查询不应该失败)。

您应该获取结果。例如。 (这不是最好的方法,但这是一种方法)。

mysql_fetch_row(result)

答案 2 :(得分:1)

根据manual,当出现错误时,mysql_query将返回false - “对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()返回成功时的资源,或者出错时返回FALSE。 “

答案 3 :(得分:1)

查看代码中没有违规行为。第一个mysql_query执行时没有错误,并且总是返回true。尝试测试返回的行数如下:

if (mysql_num_rows($result) == 0) {
//insert record
} else {
// show alreay exists
}

答案 4 :(得分:0)

首先,您正在测试:

if (!$result)

只有在查询失败时才会评估为真。

在SQL查询中使用之前,您还应该清理所有输入。