Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 程序性准备声明_Php_Mysql_Prepared Statement - Fatal编程技术网

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代码中包含一个小类并不是坏事。