Php 程序性准备声明
我需要将以下内容转换为程序性准备声明。我很难接受这个。我可以注册,但不能登录。请帮助我使用程序准备语句转换以下内容Php 程序性准备声明,php,mysql,prepared-statement,Php,Mysql,Prepared Statement,我需要将以下内容转换为程序性准备声明。我很难接受这个。我可以注册,但不能登录。请帮助我使用程序准备语句转换以下内容 if (empty($errors)) { $q = "SELECT first_name, user_id FROM users WHERE email='$e' AND pass=SHA1('$p')"; $r = @mysqli_query ($dbc, $q); if (mysqli_num_rows($r) == 1) { $row
if (empty($errors)) {
$q = "SELECT first_name, user_id FROM users WHERE email='$e' AND pass=SHA1('$p')";
$r = @mysqli_query ($dbc, $q);
if (mysqli_num_rows($r) == 1) {
$row = mysqli_fetch_array ($r, MYSQLI_ASSOC);
return array(true, $row);
} else { //If credentials are incorrect
$errors[] = 'The email or password is incorrect. Please try again';
}
} // End of Empty Errors
我不太清楚你在问什么。但是,如果您想将代码更改为使用a,则应该这样做:
// connect to server
$con = new mysqli('<hostname>','<username>','<password>','<database>');
if(empty($errors)) {
// create a prepared statement
$stmt = $con->prepare("SELECT first_name, user_id FROM users
WHERE email = ? && pass=SHA1(?)");
// bind parameters
$stmt->bind_param('ss', $e, $p);
// bind result
$first_name = '';
$user_id = 0;
$stmt->bind_result($first_name, $user_id);
// execute the query
$stmt->execute();
// store result so we can call `$num_rows` immediately
$stmt->store_result();
if($stmt->num_rows == 1) {
// fetch the data
$stmt->fetch();
return array(true, array($user_id, $first_name));
} else {
errors[] = 'The email or password is incorrect. Please try again';
}
}
从外观上看,它已经是程序性的了。@Fred ii-你能解释一下程序性是什么意思吗?我想防止注射。我该如何使用事先准备好的声明来掩盖这一点?你必须首先了解事先准备好的声明,阅读手册。你不能指望我们教你这些。另外,就我而言,准备好的语句与MySQLi和PDO一起工作,它们是面向对象的。你或我都会这么认为,但这不是程序性的,而是面向对象的。我试图在上面的评论中解释,准备好的语句可以使用OOP libs。我猜OP不喜欢OOP。Ooops,我只是认为问题是关于使用准备好的语句。保留它,开始使用OOP可能会有帮助,在过程性d'oh代码中包含一个小类并不是坏事。