Php 如何在mySQLi中编写注册脚本?

Php 如何在mySQLi中编写注册脚本?,php,mysqli,Php,Mysqli,我正在尝试将用于在网站上注册用户的脚本从SQL转换为SQLi。我有一些代码,不知道它是否正确。谢谢 $members = new mysqli("localhost", "root", "pass", "members"); $check = $members->prepare("select email from users where email = ?"); $check->bind_param('s', $_POST['r_email']); $check->execu

我正在尝试将用于在网站上注册用户的脚本从SQL转换为SQLi。我有一些代码,不知道它是否正确。谢谢

$members = new mysqli("localhost", "root", "pass", "members");
$check = $members->prepare("select email from users where email = ?");
$check->bind_param('s', $_POST['r_email']);
$check->execute();
$check->store_result();
if ($check->num_rows > 0) {
echo "user already registered";
} else {
$user_id = mt_rand(100000000, 999999999);
$add_user = $members->prepare("insert into users(email, password, user_id) values(?, ?, ?)");
$add_user->bind_param('ssi', $r_email, $r_password, $user_id);
$r_email = $_POST['r_email'];
$r_password = md5($_POST['r_password']);
$add_user->execute();
$add_user->close();
}
$check->close();
$members->close();

在检查
mysqli\u stmt::num\u rows
之前,需要调用
mysqli\u stmt::store\u result
(如中所述)。之后,需要使用
mysqli\u stmt::close
()关闭语句


Edit:另外,使用md5进行密码哈希(尤其是不含盐的情况下)是非常不安全的。查看有关更安全的解决方案(bcrypt、salt等)的建议。

处理您在评论中指出的错误消息,“在进行新语句准备之前必须获取所有数据”

错误的意思正是它所说的:在从上一条语句获取所有数据之前,您正试图准备一条新语句。从上的手动输入

用于从上次查询中开始检索结果集 在数据库上使用mysqli_real_query()函数执行 连接

必须调用this或mysqli_store_result()函数 在检索查询结果之前,以及 必须调用以防止对该数据库连接进行下一次查询 避免失败

此外,从上的手动输入

返回结果集中的行数。使用 mysqli_stmt_num_rows()取决于是否使用 mysqli_stmt_store_result(),用于在 语句句柄


你有什么特别的问题吗?您是否对其进行了测试并收到我们可以帮助您解决的错误?或者你只是想验证你的代码是否存在严重错误?嗨,yeh,我刚刚尝试了一下,结果出现了错误“在新语句准备之前必须获取所有数据”看看PDO的数据库访问功能,它比mysqli更好、更容易使用。我按照你说的方式编辑了它,这是实现我想要做的事情的最佳方式吗?使用和存储结果之间的差异?lol,如果我想要这些值,它会是while($result=$check->fetch_row){}还是sommin之类的lol基本上是指这样一个事实,即你的问题通常可以通过阅读你正在使用的函数的手册条目来解决,当你这样做的时候,你会变得更聪明。。。教一个人钓鱼……:)yeh lol orite我希望有人能真正善于解释php网站在这方面的糟糕之处。php手册就是用来解释这种语言是如何工作的。但事实并非如此。