我正在尝试运行一个初学者mysql程序,该程序根据数据库中的存储值检查两个参数。我有一个名为' sl493'在服务器上,它有一个表' metauser'和1行数据。当我尝试运行该程序时,我只能成功连接"并且没有'登录确定'
<html>
<head>
<title>Connecting MySQL Server</title>
</head>
<body>
<?php
$username = 'fahad';
$password = '2';
$dbhost = '*********.edu';
$dbuser = '*******';
$dbpass = '*******';
$conn = mysql_connect($dbhost, $dbuser, $dbpass); // connect to server
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_select_db('sl493',$conn); //pick sl493 database
$result = mysql_query("SELECT *
FROM metauser
WHERE metauser.username = $username;
AND metauser.password = $password") ; //select data from metauser table
$row = mysql_fetch_assoc($result);
if($row['username'] == $username)
{
echo 'Login ok';
}
else
{
'Login failed';
}
?>
</body>
</html>
这是数据库的快照: http://i.stack.imgur.com/0PUPG.jpg
关于出了什么问题的任何建议?
答案 0 :(得分:2)
你不应该像对待字符串那样对待字符串。
您的$username
子句中的where
末尾也有一个分号,需要删除。
$result = mysql_query("SELECT *
FROM metauser
WHERE metauser.username = '$username'
AND metauser.password = '$password'") ;
有关字符串文字的更多内容:
您目前的代码向SQL injection开放。使用mysqli
with prepared statements或PDO with prepared statements。
对于密码存储,请使用CRYPT_BLOWFISH或PHP 5.5的password_hash()
功能
对于PHP&lt; 5.5使用password_hash() compatibility pack
。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
同时将or die(mysql_error())
添加到mysql_query()
。
旁注:错误报告应仅在暂存时完成,而不是生产。
答案 1 :(得分:0)
根据php.net:
$query = sprintf("SELECT * FROM metauser
WHERE metauser.username='%s' AND metauser.password='%s'",
mysql_real_escape_string($username),
mysql_real_escape_string($password));
// Perform Query
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
if($row['username'] == $username)
{
echo 'Login ok';
}
仅供参考,该页面还说不推荐使用mysql_query和mysql_fetch_assoc。