PHP MySql Select语句无效......有什么建议吗?

时间:2011-05-29 13:59:39

标签: php mysql

[UPDATED]新代码“sql_real_escape_string()”
[更新]如果有人想在 Test site 上查看该网站 [UPDATED] with while代码通过echo

显示任何结果

大家好,

我已经查看了很多关于这个问题的帖子,但是根本无法理解为什么以下代码不起作用:

    $username = $_POST['username'];

    // get the record of the user, by looking up username in the database.  
    $query = sprintf("SELECT UserName, Password FROM userlogin WHERE UserName='%s'", mysql_real_escape_string($username));

    $result = mysqli_query($dbc, $query) or 
        die ("Error Querying Database for: " . $query . 
        "<br />Error Details: " . mysql_error() . "<br/>" . $result);

while ($row = mysqli_fetch_assoc($result))
{
         Echo($row['UserName']);
}

代码似乎是正确的...数据库工作正常(用于输入),连接是应用require_once('databaseconnection.php')的共享连接;这是为了注册方面的工作。

像往常一样,我确信这是一件简单的事情,我忽略了但却不能为我的生活看到它!

我没有收到来自myssql_error()的任何错误消息,只是空白。

任何帮助都会非常感激。

此致

6 个答案:

答案 0 :(得分:2)

$data将包含结果对象。您需要使用类似mysqli_fetch_assoc($data)的内容来迭代它。

此外,您可以将变量直接插入到双引号字符串中 - 即UserName='".$username."'"可以更清晰地写为UserName='$username',而不是打破字符串。

此外,请使用mysqli_real_escape_string()功能清理您的输入 - 所有输入都是邪恶的。你有一个SQL注入漏洞等待在这里发生。

请记住,验证要插入数据库的所有数据是一个非常好的主意。

答案 1 :(得分:2)

检查您尝试查询的用户名,因为它可能为空。你真的使用post-request来运行那个脚本吗?你如何验证它不起作用?查询后您如何处理$ data?

如果似乎什么也没发生,那么您的查询可能与任何记录都不匹配。检查您要查找的用户名的空格和大小写。

请注意这些警告:

  • 在sql中使用之前,请使用预准备语句或至少sql-escape任何用户输入。
  • 请勿在严格的代码中使用die进行调试。

答案 2 :(得分:1)

您经常遇到查询本身的问题,而不是实现问题。首先在phpMyAdmin中尝试一下,看看是否有任何问题。 检查服务器日志。

顺便说一下:永远不要把变量从POST变成查询!这绝对是一个SQL注入'

答案 3 :(得分:1)

您可能遇到查询问题。 您是否尝试回显$查询并直接使用mysql客户端或工作台运行?

答案 4 :(得分:1)

尝试打印$data变量而不是仅打印查询。检查,您是否能够收到任何错误消息。如果你能看到任何数据,那么你应该使用mysql fetch函数来迭代。试试吧。

答案 5 :(得分:1)

这段代码似乎没问题。也就是说,如果$ dbc包含实际的数据库连接。但是当函数实际返回结果对象或布尔值时,选择命名变量$data表示您可能处理错误的数据。

如果这不是问题,我们肯定会看到更多代码。