【问题标题】:can't perform SELECT query无法执行 SELECT 查询
【发布时间】:2015-05-03 02:47:50
【问题描述】:

我的脚本应该将用户登录到我的数据库中。

它通过检查用户名和密码是否与员工表上的一行匹配来做到这一点。

如果发现用户名和密码确实存在,它将用户名和密码存储在 cookie 中。

我遇到的问题是用户没有登录。

已通过echo方法识别出以下变量在点击按钮时具有以下值

$行 = 0 $username = 表单上用户名字段中的任何内容

这似乎表明查询有问题

<?php

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die                      ('Error connecting to mysql');

$dbname = 'the_shop';
mysql_select_db($dbname);

if(isset($_GET['submit']))
{
    $username = $_GET['username'];
    $password = md5($_GET['password']);
    echo "$username + $password <br />";

    // insert user into db
//  $sql = "INSERT INTO `logindb`.`users` (`id`, `username`, `password`) VALUES (NULL, '".$username."', '".$password."');";
//  echo $sql;
//  $result = mysql_query($sql);

    // getting user from db
    $query  = "SELECT Username, Password FROM staff WHERE `Username`='.$username.'";
    $result = mysql_query($query)
    or die(mysql_error());
    $num=mysql_numrows($result);
    echo $num;
    if($num <= 0) {
  echo "login not successful";
  echo "$username";
}
else
{
    $_SESSION['username'] = '$username';
    $_SESSION['password'] = '$password';
//header("Location:Admin_Control_panel.php");
}
}
?>

【问题讨论】:

  • Please, don't use mysql_* functions in new code。它们不再维护and are officially deprecated。看到red box?改为了解 prepared statements,并使用 PDOMySQLi - this article 将帮助您决定哪个。
  • mysql_num_rows($result); 不是mysql_numrows,但无论如何你都应该使用mysqli
  • 为什么只查用户名,不查密码?
  • 我知道这个问题,但是在我的作业必须提交之前我只剩下几天了,所以我没有时间学习如何使用准备好的语句。我正在为我最后一年的项目做类似的事情,并打算使用准备好的陈述,然后至少可以说我被教导过时的图书馆是很烦人的。 @Dagon,因为我正在尝试将其排序为用户名 1st。
  • 好吧,小伙子下次早点开始你的作业:-)

标签: php mysql


【解决方案1】:

首先,您的$query 中有不需要的字符 (.)。

"SELECT Username, Password FROM staff WHERE `Username`='.$username.'"
                                                        ^         ^

应该是。

"SELECT Username, Password FROM staff WHERE `Username`= '$username'"

没有点。

【讨论】:

    【解决方案2】:

    这一行:

    $query  = "SELECT Username, Password FROM staff WHERE `Username`='.$username.'";
    

    需要:

    $query  = "SELECT Username, Password FROM staff WHERE `Username`='$username'";
    

    没有必要连接字符串,因为您使用的是double-quotes,而PHP 正在解析双引号字符串中的$ 值。

    【讨论】:

      【解决方案3】:

      您的查询应该是:

      $query = 'SELECT Username, Password FROM staff WHERE Username = ' . $username;
      

      我建议研究 PDO(PHP 数据对象)作为您正在使用的方法和参数化变量的替代方法。

      http://php.net/manual/en/book.pdo.php

      【讨论】:

      • 当我在最后一年的项目中使用 php 和 mysql 时,我完全打算明年这样做,但我现在没有时间学习它,因为我的任务需要在几天内完成:)
      【解决方案4】:
      $query  = "SELECT Username, Password FROM staff WHERE `Username`='$username'";
      

      【讨论】:

        猜你喜欢
        • 2015-04-22
        • 2016-01-27
        • 2014-03-04
        • 1970-01-01
        • 2016-08-30
        • 2015-10-06
        • 2017-09-28
        • 2023-03-03
        相关资源
        最近更新 更多