gpt4 book ai didi

php - php中的mysql查询总是返回false

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:06 25 4
gpt4 key购买 nike

我只是想调用一个表并检查用户输入的用户名是否匹配表中的任何内容,但是我总是收到“您的新用户”响应。如果我在 $UserName 周围加上单引号,那么它将始终返回 true。

<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>DunGen</h1>
<?php
$email = $_POST["email"];
$name = $_POST["name"];

require_once('config.inc.php');
$mysqli = new mysqli($database_host, $database_user, $database_pass, $database_name);
if($mysqli -> connect_error) {
die('Connect Error ('.$mysqli -> connect_errno.') '.$mysqli -> connect_error);
}

if($result = $mysqli -> query("SELECT * FROM UserDetails WHERE UserName=$name"))
{
echo "Welcome back ",$name, "<br>";
}
else
{
echo "Hello ",$name, " you're new here ain't yah? <br>";
$sql = "INSERT INTO UserDetails (UserName, UserEmail) VALUES ('$name','$email')'";
}

if (filter_var($email, FILTER_VALIDATE_EMAIL))
{
echo " Email adress: ", $email;
}
else
{
echo "Invalid Email";
}
echo "<br>";
//copied from w3 schools
$conn->close();
?>

</body>
<html>

固定编辑:按照给出的建议,我用这两行替换了 if 语句:

  $result = mysqli_query($mysqli,"SELECT * FROM UserDetails WHERE   UserName='$name'");
if($result ->num_rows == 0)

简单地说,我正在评估我是否有正确的 SQL 天气,而不是天气是否正确返回。

最佳答案

  1. 您很容易受到 sql injection attacks 的攻击.
  2. 您的查询无效:
[..snip..]* FROM UserDetails WHERE UserName=$name"))
^^^^^^

您正在生成文字查询

SELECT ... WHERE UserName=Fred

并且由于您的表极不可能有名为 Fred 的字段,因此您会遇到查询语法错误。由于您的错误处理不正确,您永远看不到 MySQL 试图向您显示的错误消息。

不返回任何行的查询不是错误情况。这是一个完全有效的查询,也是一个完全有效的结果集,只是恰好不包含任何行。

你的逻辑应该是

$sql = "....";
$result = mysqli_query($con, $sql) or die(mysqli_error($con));
if($result->num_rows == 0) {
... user does not exist ...
} else {
... user does exist ...
}

关于php - php中的mysql查询总是返回false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34024020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com