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