[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()的任何错误消息,只是空白。
任何帮助都会非常感激。
此致
答案 0 :(得分:2)
$data
将包含结果对象。您需要使用类似mysqli_fetch_assoc($data)
的内容来迭代它。
此外,您可以将变量直接插入到双引号字符串中 - 即UserName='".$username."'"
可以更清晰地写为UserName='$username'
,而不是打破字符串。
此外,请使用mysqli_real_escape_string()
功能清理您的输入 - 所有输入都是邪恶的。你有一个SQL注入漏洞等待在这里发生。
请记住,验证要插入数据库的所有数据是一个非常好的主意。
答案 1 :(得分:2)
检查您尝试查询的用户名,因为它可能为空。你真的使用post-request来运行那个脚本吗?你如何验证它不起作用?查询后您如何处理$ data?
如果似乎什么也没发生,那么您的查询可能与任何记录都不匹配。检查您要查找的用户名的空格和大小写。
请注意这些警告:
答案 2 :(得分:1)
您经常遇到查询本身的问题,而不是实现问题。首先在phpMyAdmin中尝试一下,看看是否有任何问题。 检查服务器日志。
顺便说一下:永远不要把变量从POST变成查询!这绝对是一个SQL注入'
答案 3 :(得分:1)
您可能遇到查询问题。 您是否尝试回显$查询并直接使用mysql客户端或工作台运行?
答案 4 :(得分:1)
尝试打印$data
变量而不是仅打印查询。检查,您是否能够收到任何错误消息。如果你能看到任何数据,那么你应该使用mysql fetch函数来迭代。试试吧。
答案 5 :(得分:1)
这段代码似乎没问题。也就是说,如果$ dbc包含实际的数据库连接。但是当函数实际返回结果对象或布尔值时,选择命名变量$data
表示您可能处理错误的数据。
如果这不是问题,我们肯定会看到更多代码。