Подготовленные инструкции с помощью ООП — PHP MySQL

#php #oop #prepared-statement

#php #ооп #подготовленное заявление

Вопрос:

Хорошо, итак, я работал с классом Mysql. Я создаю форму, которая будет получать информацию о вошедшем в систему пользователе. У меня есть функция с в классе, которая должна это делать, но у меня возникают трудности с выполнением этого. Я использую подготовленные инструкции. Что я хочу сделать, так это вернуть массив данных из базы данных.

Вот код, который у меня есть на данный момент:

 <?php

require_once('constants.php');

class Mysql {

    private $conn;

    function __construct(){
        $this->conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or 
            die("There was an issue connecting to the database");
    }

    function user_info($username){
        //query
        $query = "SELECT * FROM users WHERE username = ? LIMIT 1";

        //prepare query and execute
        if($stmt = $this->conn->prepare($query)){
            $stmt->bind_param('s', $username);
            $stmt->execute();

            //WHAT DO I DO HERE

            $stmt->close();
            return $data;
        }
    }
}
?>
  

Ответ №1:

После выполнения вы бы сделали что-то вроде этого:

 /* bind result variables */
$stmt->bind_result($user_id, $user_lastname); // Add all the variables you need

/* fetch value */
$stmt->fetch();

echo 'The user ID is: ' . $user_id;
  

Ответ №2:

После вашего вызова mysqli_stmt->execute() (который похож на mysql_query() в том, что он фактически запускает запрос), вы либо захотите вызвать mysqli_stmt->fetch() , который извлекает следующий.

Вместо вашего комментария, который указывает на некоторую путаницу, поместите этот код:

 while($row = $sth->fetch())
{
    print_r($row); // Do whatever you want with each row here
}
  

На каждой итерации этого цикла вы получите одну строку из результата. Если вы выполняете запрос с помощью УНИКАЛЬНОГО ключа (который выглядит как он), вам нужно вызвать его только один раз.

Комментарии:

1. Это не PDO, вопрос касается mysqli.

2. Я просто хочу вернуть результаты в массив … и я не использую PDO.

3. Хм, я, кажется, предполагал PDO, однако это легко исправить.

Ответ №3:

Вы должны привязать переменные к полям результата вашего результата. выборка возвращает bool только при использовании mysqli.

http://us3.php.net/manual/en/mysqli-stmt.fetch.php

 // Bind the result to however many variables are in *
$stmt->bind_result($your, $returned, $fields);

/* fetch values */
while ($stmt->fetch()) {
    // do stuff with $your $returned $fields
}
  

Ответ №4:

Если вам нужны результаты вашего PreparedStatement запроса, вам нужно будет использовать bind_result-метод. После этого вы можете использовать метод fetch для заполнения связанных переменных.

Ответ №5:

Есть простой способ, которым вы можете сделать это, просто поместив все в массив.

 //Execute statement
$stmt->execute();
$dataArr = array();
//Fetch result to array
$result = $stmt->get_result();
while($row = $result->fetch_array(MYSQLI_ASSOC)) {
    array_push($dataArr, $row);
}
print_r($dataArr);
  

$dataArray будет содержать все данные.Если вы используете этот метод, то вам не нужно привязывать результат.