我正在通过阅读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);
}
}
答案 0 :(得分:5)
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)
在这种情况下,$ result将是一个资源。您应该使用mysql_num_rows()检查结果数。
永远不要在查询中使用$ _POST或任何直接用户输入。总是在查询中使用mysql_real_escape_string()之前转义输入,或者你已经用SQL注入打开了一个严重的安全问题。
例如:
$safe_name = mysql_real_escape_string($_POST["name"]);
$sql = "SELECT * FROM users WHERE username='$safe_name'";
答案 3 :(得分:0)
这不完全正确。
mysql_query()也会失败,如果用户没有,则返回FALSE 有权访问查询引用的表。
在您的情况下,您拥有该权限,但该用户不存在。所以它将返回true但返回的结果集为空。
答案 4 :(得分:0)
答案 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!';
}
?>
谢谢大家的帮助。