Я фактически конвертирую свой код из mysql в mysqli. У меня есть код, написанный в mysql, который возвращает результат (ы) запроса как объект. Я использую ExtJS4 и архитектуру MVCS для обработки этого результата, возвращаемого файлом php. Вот исходный код MySQL PHP:PHP5 - Сохранение результатов строки mysqli как объекта?
<?php
require_once('../../db_mysqli.php');
require_once '../../lib/response.php';
require_once '../../lib/request.php';
class user{
var $user_id;
var $first_name;
var $last_name;
var $sex;
var $birth_date;
var $email;
var $password;
}
$total;
if(isset($_GET['email'])){
$email = $_GET['email'];
$password = $_GET['password'];
$query = "SELECT * FROM user_details
WHERE email = '$email' AND password = '$password'";
$result = mysql_query($query);
$totalquery = mysql_query("SELECT COUNT(*) FROM user_details
WHERE email = '$email'
AND password = '$password'");
$total = mysql_fetch_array($totalquery);
}
$total =($total[0]);
$query_array=array();
$i=0;
//Iterate all Select
while($row = mysql_fetch_array($result)){
//Create New User instance
$inputData = new user();
//Fetch User Info
$inputData->user_id=$row['user_id'];
$inputData->first_name=$row['first_name'];
$inputData->last_name=$row['last_name'];
$inputData->sex=$row['sex'];
$inputData->birth_date=$row['birth_date'];
$inputData->email=$row['email'];
$inputData->password=$row['password'];
//Add User to ARRAY
$query_array[$i]=$inputData;
$i++;
}
mysql_close($con);
//Creating Json Array needed for Extjs Proxy
$res = new Response();
$res->success = true;
$res->message = "Loaded read data";
$res->total = $total;
$res->data = $query_array;
//Printing json ARRAY
print_r($res->to_json());
?>
Что я делаю то, что я создаю объект для хранения строки результата запроса, я запрос к базе данных, после чего я перебирать результирующий набор. Во время каждой итерации я создаю объект-держатель и сохраняю там значения, а затем сохраняю их в другом массиве, который передается обратно с объектом ответа. Этот код отлично работает.
Однако, я использую mysqli, и до сих пор это то, что я пробовал. Пожалуйста, обратите внимание, что я использовал тот же класс, и я буду показывать только ту часть, где я запрашиваю и сохраняю результаты для объекта.
//I used some hard coded values first
$query = "SELECT * FROM user_details
WHERE email = '[email protected]' AND password = '123'";
$result = $mysqli->query($query);
И я попытался это:
$query_array=array();
$i=0;
//Iterate all Select
while($row = $result->fetch_array(MYSQLI_ASSOC)){
//Create New User instance
$inputData = new user();
//Fetch User Info
$inputData->user_id=$row['user_id'];
$inputData->first_name=$row['first_name'];
$inputData->last_name=$row['last_name'];
$inputData->sex=$row['sex'];
$inputData->birth_date=$row['birth_date'];
$inputData->email=$row['email'];
$inputData->password=$row['password'];
//Add User to ARRAY
$query_array[$i]=$inputData;
$i++;
}
$result->close();
$mysqli->close();
$res = new Response();
$res->success = true;
$res->total = $total;
$res->data = $query_array;
print_r($res->to_json());
И я также пытался сохранить набор результатов, как, например:
if ($result = $mysqli->query($query)) {
/* fetch object array */
while ($obj = $result->fetch_object()) {
$query_array[$i]=$obj;
$i++
}
}
Однако, когда я называю их от браузер с использованием localhost:8888/../../../../../../readUser.php
, я не вижу никакого выхода из вызова функции , а это значит, что у меня там ошибка.
Может ли кто-нибудь помочь с моей небольшой проблемой? Любая помощь очень ценится. Благодарю.
Хорошо, что делает 'var_dump ($ query_array);' говорит вам? Или, возможно, код там даже не доходит? –
Я поместил 'var_dump ($ query_array);' после моего цикла while и ничего не выводит. – Razgriz
Что вы имеете в виду: 'Я не вижу никакого вывода из вызова функции print_r', вы не получаете никаких результатов от своего запроса или у вас есть фатальная ошибка php? Вы должны включить обработку ошибок, отображать ошибки на экране и иметь исключения mysqli throw, чтобы увидеть, что не так. – jeroen