我正在尝试为网站编写登录功能,但由于一些奇怪的原因,MySQLi query
命令似乎无法正常工作。它通过时没有错误,但当我看到它的表时它是空的。
以下是相关代码。
$hash = password_hash(($_POST['password']), PASSWORD_DEFAULT);
$hash = $sql_link->real_escape_string($hash);
$_POST['username'] = $sql_link->real_escape_string($_POST['username']);
// Escape the input data
$cmd = ('INSERT INTO web_creds(email, pass, joined) ' .
'VALUES ' .
'("'.$_POST['username'].'", ' .
'"'.($hash).'", ' .
'NOW()' .
')');
if (!$sql_link->query($cmd) === TRUE) {
$err[]="input failed " . $sql_link->error;;
}
else if($sql_link->affected_rows==1)
{
$_SESSION['msg']['reg-success']="Passed";
}
else $err[]='This username is already taken!';
我运行它,我在日志中看到了查询。
57 Query INSERT INTO web_creds(email, pass, joined) VALUES ("email@domain.com", "hashed-password", NOW())
但是当我运行select * from web_creds
时,我得到EMPTY
。
非常感谢任何帮助。感谢。
答案 0 :(得分:1)
(评论:您的代码容易受到SQL注入)
它生成的SQL语句无效 - 你在字符串周围加上双引号(应该是单引号或使用绑定)。
(评论:我,我希望其他大多数人,认为它不会在查询中使用显式数据库名称)
添加是否会如此困难:
print "<div>$cmd</div>";
进入你的代码?
(评论:为什么所有括号?)
试试这个:
$cmd = "INSERT INTO web_creds(email, pass, joined)
VALUES
( '$_POST[username]'
, '$hash)'
, NOW()
)";