准备好的陈述
好的,我刚开始看看MySQLi准备好的语句.这对我来说是一个很大的进步,因为我对MySQL和PHP都是非常新的,所以我对这个概念(可能大约一个小时的价值)有一个非常脆弱的把握,所以你的答案必须用同样的措辞,抱歉这个.
我想知道的是,如果我正确地写了一份准备好的陈述.没有什么比学习一个不正确并习惯它的方法更糟糕的了,因此编写整个项目效率低下.
要点:我有一个注册用户的函数,然后返回插入的id,因此是用户的引用id.
以前,我只是查询数据库,尽管使用了mysql_real_escape_string()和类似的安全措施,但我被告知存在安全风险.
现在,它看起来像这样:(假设为了这个问题,定义了所有引用的变量,绑定的参数是字符串,并且所有被调用的函数都存在且正在工作).
function registerUser($username, $fname, $email, $password, $region, $activation) {
$uniqueSalt = uniqueSalt();
$password = sha1($uniqueSalt . $password);
$mysqli = mysqli_connect('localhost', 'root', '', 'database');
if ($stmt = $mysqli->prepare("INSERT INTO `users` VALUES('', ?, ?, ?, ?, '$password', '$uniqueSalt', '$activation')") ) {
$stmt->bind_param("ssss", $username, $fname, $email, $region);
$stmt->execute();
$stmt->close();
} else {
echo 'error preparing statement';
}
return mysqli_insert_id($mysqli);
}
问题
它似乎有效,但是:
1)这是执行预准备语句的正确语法吗?
2)我已将此函数所在的文件(称为function.php)包含在另一个名为init.php的文件中,该文件先前已定义变量$mysqli.我发现如果我没有包含
$mysqli = mysqli_connect('localhost', 'root', '', 'database');
我会收到一个错误.为什么我必须在函数内重新定义它?
3)当我之前在使用预备语句之前结束函数时,返回mysql_insert_id()工作正常,现在我发现我必须使用mysqli_insert_id($mysqli).
如果我在括号内没有包含$mysqli,我会得到错误mysqli_insert_id()预计恰好有1个参数,给定0.为什么会这样,为什么它与我之前的不同?
干杯,
卢克.