PHP Mysql数据插入

时间:2011-11-01 16:08:14

标签: php mysql

我正在通过阅读php手册和学习不同的教程来学习PHP。我遇到了mysql_query的问题。我正在尝试使用PHP从表单中将用户数据插入到数据库中。 mysql_query应该返回false,因为数据库中还没有用户名,但根据结果我得到的是返回true并且没有输入任何内容。我使用mysql_query错误或正在使用!结果不正确?

$sql = "SELECT * FROM users WHERE username='".$_POST["name"]."'";
$result = mysql_query($sql)

if (!$result) {
    $sql = "INSERT INTO USERS (username, email, password) VALUES
            ('".$_POST["name"]."', '".$_POST["email"]."', '".$passwords[0]."')";
    $result = mysql_query($sql);

    if ($result) {
        echo "It's entered!";
    }  else {
        echo "There's been a problem: " . mysql_error();
    }
} else {
    echo "There's 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);
    }
}

6 个答案:

答案 0 :(得分:5)

杰森,你正在检查查询是否失败 - 而不是它是否返回了值'false'或'true'。您需要致电mysql_fetch_row或类似,然后比较结果。

或者您可以使用以下内容:

if (mysql_num_rows($result) == 0) {
    /* User doesn't exist */
} else {
    /* User exists */
}

这将检测您的查询是否选择了任何用户 - 如果他们有 - 您的用户已经存在。

此外,您应该了解输入消毒和SQL注入。这是一个非常关键的安全问题,您的脚本很容易受到攻击。 More info here.

答案 1 :(得分:4)

没有结果行的选择查询STILL返回结果句柄。如果由于语法错误,约束违规等导致查询失败,msyql_query()将仅返回'false'值...

您的代码应为

$sql = "...";
$result = mysql_query($sql);
if ($result === false) {
   die("QUery failed: " . mysql_error());
}

if (mysql_num_rows($result) == 0) {
   ... user does not exist ...
}

请请阅读有关SQL注入漏洞的信息。您的代码有足够宽的孔,方便卡车通过。

答案 2 :(得分:1)

  1. 在这种情况下,$ result将是一个资源。您应该使用mysql_num_rows()检查结果数。

  2. 永远不要在查询中使用$ _POST或任何直接用户输入。总是在查询中使用mysql_real_escape_string()之前转义输入,或者你已经用SQL注入打开了一个严重的安全问题。

  3. 例如:

    $safe_name = mysql_real_escape_string($_POST["name"]);
    $sql = "SELECT * FROM users WHERE username='$safe_name'";
    

答案 3 :(得分:0)

这不完全正确。

  

mysql_query()也会失败,如果用户没有,则返回FALSE   有权访问查询引用的表。

在您的情况下,您拥有该权限,但该用户不存在。所以它将返回true但返回的结果集为空。

答案 4 :(得分:0)

如果查询没有返回任何数据,mysp_query将返回一个空集。然而,查询不会失败。

答案 5 :(得分:0)

我解决了我的问题:

像这样

<?php 
$username = $_POST['username']; 

include('config.php');
$result = mysqli_query($con,"SELECT * FROM persons WHERE username='$username'");

while($row = mysqli_fetch_array($result)){

echo $row['username'];
echo "</br>";
echo "</br>";
echo "<p><b>Secret Question</b></p>";
echo $row['secret'];

 }  
?>


</br>
</br>
<form action="forgetaction.php" method="POST">
<p><b>Answer is :</b><p>
<input type="hidden" name="username" value="<?php echo $username; ?>">
<input type="text" name="answer">
</br>
</br>
<input type="Submit" value="Submit">
</form>


and forget action.php like this :

<?php 
include('config.php');

$username = $_POST['username']; 
echo $username;

$result = mysqli_query($con,"SELECT * FROM persons WHERE username='$username'");
$row = mysqli_fetch_array($result);

       if($row['answer'] == $_POST['answer']) {
            echo $row['password'];
        } else {
            echo 'wrong!';
             }

?>

谢谢大家的帮助。