1
我的查詢出了什麼問題?我確信它的工作在幾天前,但今天我不知道它爲什麼會發生。我怎麼能解決這個問題? 對不起我的英文不好pg_query():查詢失敗:錯誤:由用作表達式的子查詢返回的多於一行
查詢:
function getUserGroupList() {
$rulesQuery = "SELECT * FROM t_rules";
$rulesResult = pg_query($this->DB, $rulesQuery);
$nextQuery = '';
while ($data = pg_fetch_array($rulesResult)) {
$nextQuery .= ",(SELECT COUNT(*) FROM t_user_group_rules ugp WHERE ugp.ref_user_group = ug.id AND ugp.ref_rules = ".$data['id'].") as ".str_replace(' ', '_', $data['c_name'])."_count,(SELECT c_status FROM t_user_group_rules ugp WHERE ugp.ref_user_group = ug.id AND ugp.ref_rules = ".$data['id'].") as ".str_replace(' ', '_', $data['c_name']);
}
$query = "SELECT ug.id, ug.c_name $nextQuery
FROM t_user_group ug
WHERE ug.c_active = 1";
$result = pg_query($this->DB, $query);
// echo $query;
// exit();
$all = array();
while ($data = pg_fetch_assoc($result)) {
array_push($all, $data);
}
echo json_encode($all);
}
如果我贊同$query
,它會變成這個樣子
SELECT
ug.id,
ug.c_name,
(SELECT count(*)
FROM t_user_group_rules ugp
WHERE ugp.ref_user_group = ug.id
AND ugp.ref_rules = 1
) AS command_count,
(SELECT c_status
FROM t_user_group_rules ugp
WHERE ugp.ref_user_group = ug.id
AND ugp.ref_rules = 1
) AS command,
(SELECT count(*)
FROM t_user_group_rules ugp
WHERE ugp.ref_user_group = ug.id
AND ugp.ref_rules = 2
) AS user_count,
(SELECT c_status
FROM t_user_group_rules ugp
WHERE ugp.ref_user_group = ug.id
AND ugp.ref_rules = 2
) AS USER,
(SELECT count(*)
FROM t_user_group_rules ugp
WHERE ugp.ref_user_group = ug.id
AND ugp.ref_rules = 3
) AS executive_count,
(SELECT c_status
FROM t_user_group_rules ugp
WHERE ugp.ref_user_group = ug.id
AND ugp.ref_rules = 3
) AS executive,
(SELECT count(*)
FROM t_user_group_rules ugp
WHERE ugp.ref_user_group = ug.id
AND ugp.ref_rules = 4
) AS rekon_count,
(SELECT c_status
FROM t_user_group_rules ugp
WHERE ugp.ref_user_group = ug.id
AND ugp.ref_rules = 4
) AS rekon,
(SELECT count(*)
FROM t_user_group_rules ugp
WHERE ugp.ref_user_group = ug.id
AND ugp.ref_rules = 5
) AS ej_count,
(SELECT c_status
FROM t_user_group_rules ugp
WHERE ugp.ref_user_group = ug.id
AND ugp.ref_rules = 5
) AS ej,
(SELECT count(*)
FROM t_user_group_rules ugp
WHERE ugp.ref_user_group = ug.id
AND ugp.ref_rules = 12
) AS tes_count,
(SELECT c_status
FROM t_user_group_rules ugp
WHERE ugp.ref_user_group = ug.id
AND ugp.ref_rules = 12
) AS tes
FROM t_user_group ug
WHERE ug.c_active = 1;
您應該在PHP中爲您的查詢使用預準備語句。您當前的查詢非常難以閱讀,因爲它被很多連接混淆。 –
它也是不安全的。 https://en.wikipedia.org/wiki/SQL_injection –
@TimBiegeleisen我該怎麼做?我很困惑。 –