php中的mysql查询总是返回false

时间:2015-12-01 15:30:50

标签: php mysql

我只是试着打电话给一张桌子并检查用户是否在表格中输入了用户名,但是我总是在这里找到你的新用户。响应。如果我在$ 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,而不是天气或它没有正确返回。

2 个答案:

答案 0 :(得分:2)

  1. 您容易受到sql injection attacks
  2. 的攻击
  3. 您的查询无效:
  4. "

    您正在生成文字查询

    [..snip..]* FROM UserDetails WHERE UserName=$name"))
                                                ^^^^^^
    

    由于您的表格很可能没有名为SELECT ... WHERE UserName=Fred 的字段,因此您会收到查询语法错误。由于您的错误处理不正确,您永远不会看到MySQL试图向您显示的错误消息。

    不返回任何行的查询 NOT 错误条件。它是一个完全有效的查询,也是一个完全有效的结果集,它恰好不包含任何行。

    你的逻辑应该是

    Fred

答案 1 :(得分:1)

你绝对应该使用预备语句函数。

但您当前的当前问题是缺少任何类型的fetch功能。

所以你检查一下:

if($result = $mysqli -> query("SELECT * FROM UserDetails WHERE UserName=$name"))

但是如果你的语句是正确的并且可以由mysql执行,它将返回true。积极的结果并不意味着您确实找到了用户。

检查是否应该获取结果。所以你可以:

if($result = $mysqli -> query("SELECT * FROM UserDetails WHERE UserName=$name"))
{
   if ($row = $result->fetch_array(MYSQLI_ASSOC)) {
     echo "Welcome back ",$row['UserName'], "<br>";
   } else {
     echo "Wrong credentials";
   }
}

更新以下是使用预备语句练习重写代码的方法:

$stmt = $mysqli->prepare('SELECT UserName FROM UserDetails WHERE UserName= ?');
$stmt->bind_param('s', $name);
if($stmt->execute())
{
   $stmt->bind_result($sqlName);
   if ($stmt->fetch()) {
     echo "Welcome back ",$sqlName, "<br>";
   } else {
     echo "Wrong credentials";
   }
}