2014-12-19 3 views
1

Я фактически конвертирую свой код из 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, я не вижу никакого выхода из вызова функции , а это значит, что у меня там ошибка.

Может ли кто-нибудь помочь с моей небольшой проблемой? Любая помощь очень ценится. Благодарю.

+0

Хорошо, что делает 'var_dump ($ query_array);' говорит вам? Или, возможно, код там даже не доходит? –

+0

Я поместил 'var_dump ($ query_array);' после моего цикла while и ничего не выводит. – Razgriz

+0

Что вы имеете в виду: 'Я не вижу никакого вывода из вызова функции print_r', вы не получаете никаких результатов от своего запроса или у вас есть фатальная ошибка php? Вы должны включить обработку ошибок, отображать ошибки на экране и иметь исключения mysqli throw, чтобы увидеть, что не так. – jeroen

ответ

0

Извинения. У меня была бесстрастная линия $res->message.= $result;, и это напугало много вещей. Вот код, который заставлял его работать.

//check for some variables that may or may not be passed 
if(isset($_GET['email'])){ 
    $email = $_GET['email']; 
    $password = $_GET['password']; 

    $query = "SELECT * FROM user_details 
        WHERE email = '$email' AND password = '$password'";  
    //execute query here 
    $result = $mysqli->query($query); 
    $total = 1; 

} 

//I used the associative style since I don't want to guess column index 
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++; 
} 

//close result set and sqli connection 
$result->close(); 
$mysqli->close(); 

//create your response object 
$res = new Response(); 
$res->message = "Message Start. "; 

$res->success = true; 
$res->total = $total; 
$res->data = $query_array; //set the data to your query_array result 
print_r($res->to_json()); //send back to extJS