【发布时间】:2014-12-19 11:17:44
【问题描述】:
我实际上正在将我的代码从 mysql 转换为 mysqli。我有一个用 mysql 编写的代码,它将查询结果作为对象返回。我正在使用 ExtJS4 和 MVCS 架构来处理 php 文件返回的这个结果。这是原始的mysql php代码:
<?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 = 'test@yahoo.com' 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 从浏览器调用它们时,我看不到 print_r 函数调用的任何输出,这意味着我在某处出现错误。
谁能帮我解决我的小问题?很感谢任何形式的帮助。谢谢。
【问题讨论】:
-
好吧,
var_dump($query_array);告诉你什么?或者,也许代码甚至没有到达那里? -
我在 while 循环之后放置了
var_dump($query_array);,它没有输出任何内容。 -
你是什么意思,
I don't see any output from the print_r function call,你是没有从你的查询中得到任何结果,还是你有一个致命的 php 错误?您应该启用错误处理,在屏幕上显示错误并让 mysqli 抛出异常以查看问题所在。 -
抱歉新手问题,但我如何启用错误处理。我想我从我的查询中得到了结果,我只是不知道如何将它保存到一个对象中。
-
此时你不需要错误处理,而是错误报告;在你的 php.ini 中设置
display_errors = On并重新启动 Web 服务器 ...在你的脚本中,在顶部,你还可以添加error_reporting(~0);。