尝试在php中填充数组时遇到问题。看来,一旦我使用mysql_fetch_assoc方法进入while循环,我就无法填充我的数组。我已经包含了以下代码。
$params = $_REQUEST['params'];
$arr["status"]="ok";
$projects=array();
$files=array();
$titles=array();
$query = 'SELECT p.id as pid, f.fname as name, f.title FROM proj p INNER JOIN pic f ON f.projid=p.id WHERE p.catid=\'' . $params['category'] . '\' ORDER BY p.ordr, f.ordr';
require("../php/connect.php");
//select all projects from chosen category and pics from selected projects
$proj_result = mysql_query($query) or die ("Select failed");
//populate from rows
while($row = mysql_fetch_assoc($proj_result)){
$projects[]=$row["pid"];
$files[]=$row["name"];
$titles[]=$row["title"];
}
$arr["projects"]=$projects;
$arr["files"]=$files;
$arr["titles"]=$titles;
echo json_encode($arr);
$arr["status"]="ok";
$projects=array();
$files=array();
$titles=array();
$query = 'SELECT p.id as pid, f.fname as name, f.title FROM proj p INNER JOIN pic f ON f.projid=p.id WHERE p.catid=\'' . $params['category'] . '\' ORDER BY p.ordr, f.ordr';
require("../php/connect.php");
//select all projects from chosen category and pics from selected projects
$proj_result = mysql_query($query) or die ("Select failed");
//populate from rows
while($row = mysql_fetch_assoc($proj_result)){
$projects[]=$row["pid"];
$files[]=$row["name"];
$titles[]=$row["title"];
}
$arr["projects"]=$projects;
$arr["files"]=$files;
$arr["titles"]=$titles;
echo json_encode($arr);
结果:{“status”:“ok”,“projects”:[],“files”:[],“titles”:[]}
谢谢。
答案 0 :(得分:0)
while
循环不会创建新范围,您可以在此处看到:http://codepad.org/H1U3wXZD
关于代码本身,这里有一些建议:
0)我会考虑使用数据库抽象层(PDO就足够了)。
1)了解如何使用JOIN
。看起来您可以通过单个查询获取所有必要的信息,例如:
SELECT p.id, p.proj, c.id, c.fname, c.title
FROM proj p
INNER JOIN pic c ON c.projid=p.id
WHERE catid='<your category>'
ORDER BY p.ordr, c.ordr
2)您应该将从db获取数据的代码与构造HTML(?)的代码分开。也许你可以把它放在另一种方法中。类似的东西:
if ($cmd == 'catSelect') {
$data = getData($params['category']);
foreach ($data as $value) {
// process data here
}
}
3)我认为您使用生成的JSON通过AJAX将其发送到客户端。在这种情况下,我会完全削减脂肪(例如:生成的标记)并仅发送必需品(图片ID,标题,fname和其他必要的东西),并在客户端生成代码。这样可以加快页面加载速度,节省您和访问者的带宽。
答案 1 :(得分:0)
我的jquery / ajax客户端脚本没有正确发送类别,因此没有选择任何行。
以上代码可以使用。
答案 2 :(得分:0)
在循环中尝试这样的事情:
while($row = mysql_fetch_assoc($proj_result)){
$projects[]=$row["pid"];
$files[]=$row["name"];
$titles[]=$row["title"];
echo $row["pid"]." -- ".$row["name"]." -- ".$row["title"]."\n";
}
你有什么收获吗?一旦你尝试过,我们将从那里拿走它。我的猜测是你没有从MySQL获得任何数据。