Подготовленные заявления с ООП - PHP MySql - PullRequest
2 голосов
/ 05 июня 2011

Хорошо, так что я работаю в классе 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;
        }
    }
}
?>

Ответы [ 5 ]

5 голосов
/ 05 июня 2011

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

/* 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;
3 голосов
/ 05 июня 2011

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

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

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

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

2 голосов
/ 05 июня 2011

Вы должны привязать переменные к полям результата вашего результата.fetch возвращает только 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
}
0 голосов
/ 02 ноября 2018

Существует простой способ сделать это, просто поместив все в массив.

//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 будет содержать все. Если вы используете этот метод, вам не нужно связывать результат.

0 голосов
/ 05 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...