【发布时间】:2013-07-29 19:43:07
【问题描述】:
以下 mysqli 查询不执行,因为我检查了我的“用户”表并且它不包含任何记录:
//connection.php//
$db_connect = mysqli_connect('myremotehost', 'myremoteuser', 'mypass', 'mydatabase');
if(mysqli_connect_errno($db_connect)){
echo mysqli_connect_error();
exit();
}
//
include 'database/connection.php';
$username = $_POST['username'];
$password = md5($_POST['password']);
$email = $_POST['email'];
$email_code = md5($_POST['username'] + microtime());
$gender = $_POST['gender'];
$ip = getenv('REMOTE_ADDR');
$sql = "INSERT INTO `users` (username, password, email, email_code, gender, ip, signup, lastlogin, notescheck) VALUES('$username','$password','$email','$email_code','$gender','$ip',NOW(),NOW(),NOW())";
$query = mysqli_query($db_connect, $sql);
//below are the forms with their respective 'input names' that are equal to: username, email and gender (values 'm' & 'f').
//The action of the actual form is action="" this file.
我知道这段代码是直接在 $sql 和 $query 变量下面执行的同样,问题是查询没有在数据库上发布任何内容。
有什么建议吗?
谢谢大家!
【问题讨论】:
-
问:为什么你在反引号里面有
users?这不是保留字。 -
它不会造成任何伤害。
-
在编写 任何 更多 SQL 接口代码之前,您必须阅读 proper SQL escaping 以避免严重的 SQL injection bugs。使用
mysqli时,您应该使用bind_param将$username之类的值插入到查询中,从而在很大程度上避免这些问题。 -
其次,从不使用 MD5 加密密码。它几乎不费吹灰之力,而且并不比纯文本好多少,尤其是当您甚至不费心使用盐时。使用bcrypt 正确执行此操作,否则您最终会遇到麻烦。这是您在推出自己的用户管理系统而不是使用 popular PHP framework 时所犯的错误,所有这些都已经为您完成,或者作为一个模块提供。
-
@tadman 对于类似社交网络的网站,您推荐什么 php 框架?老实说,我对使用 php 编程,尤其是使用 MYSQLi 编程有点陌生。我也知道 PDO 是一种更安全的向/从数据库插入/检索数据的方法。有什么有用的教程吗?我的问题还有其他解决方案吗?
标签: php mysql database mysqli phpmyadmin