【发布时间】:2017-08-27 20:16:57
【问题描述】:
我的查询有什么问题?几天前我确定它的工作,但今天我不知道它为什么会发生。我怎么能解决这个问题? 对不起我的英语不好
查询:
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 中为您的查询使用准备好的语句。您当前的查询很难阅读,因为它被很多串联混淆了。
-
它也非常不安全。 en.wikipedia.org/wiki/SQL_injection
-
@TimBiegeleisen 我该怎么做?我很困惑。
-
@CraigRinger 是的,我会尽快保证安全
-
您遇到了一个 PHP 问题和一个 SQL 问题。如果您想解决 SQL 问题,这就是您的标题所暗示的,请编辑您的问题并向我们展示正在运行的原始 Postgres 查询。
标签: php sql json postgresql