【发布时间】:2017-11-06 11:32:12
【问题描述】:
我有一个数组,当使用适当的语法进行内爆时,它的格式正确。也就是说它在 PGAdmin 中测试完美。但是,当我尝试在查询中显示使用变量时,它正在更改字符。这是我的代码:
从 HTML 表单发布:
$media= $_POST["userMedia"];
内爆:
$media_names = "'".implode( "%','", $media)."%'";
$media_names 转储:
string(25) "'COMM_7029%','COMM_7030%'"
$media_names 在查询错误中的样子:
m.name LIKE any (array[''COMM_7029%','COMM_7030%''])
我试图从 implode 中删除第一个“'”,但这是生成的字符串转储:
string(24) "COMM_7029%','COMM_7030%'"
其余代码:
从中选择数据进行 POST 的用户表单:
<select multiple name="userMedia" class="form-control" id="userMedia[]" style="height:350px;">
<?php
$conn = pg_connect("dblogin");
if (!$conn) {
echo "Did not connect.\n";
exit;
}
$sql = "SELECT medias.name FROM public.medias where medias.startdate > '2015-01-01'";
$rs = pg_query($conn, $sql);
if (pg_num_rows($rs) > 0) {
// output data of each row
while($row = pg_fetch_assoc($rs)) {
$menu .= "<option value=".$row['name'].">" . $row['name']. "</option>";
}
}
echo $menu;
pg_close($conn);
?>
</select>
用于数据库查询的 PHP:
$datea= $_POST["userDatea"];
$media= $_POST["userMedia"];
$datez= $_POST["userDatez"];
$media_names = "'".implode( "%','", $media)."%'";
var_dump($media_names);
if( !empty($_SERVER['REQUEST_METHOD']) && (strcasecmp($_SERVER['REQUEST_METHOD'], 'post')===0) ) {
// Create connection
$conn = pg_connect("dbconnect");
// Check connection
if (!$conn) {
echo "Did not connect.\n";
exit;
}
$result = pg_query($conn,
"SELECT
date (b.starttime),
Count(b.starttime) as Plays,
Count(distinct(b.playerid)) as Stores
FROM
public.billing b,
public.medias m,
public.players p
WHERE
b.mediaitemid = m.id and
p.id = b.playerid and
m.name LIKE any (array['$media_names']) and
b.starttime >= date('$datea') and
b.starttime < date('$datez')+1 and
m.startdate > '2015-01-01'
GROUP BY
date (b.starttime)
ORDER BY
date (b.starttime);");
if (!$result) {
echo "Query failed.\n";
exit;
}
【问题讨论】:
-
你能显示实际运行的代码供我们排除故障吗?
标签: php postgresql