【问题标题】:PHP Array with implode not translating correctly inside php postgresql query带有内爆的PHP数组在php postgresql查询中无法正确翻译
【发布时间】: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


【解决方案1】:

我删除了查询中 $media_names 周围的单引号,它按预期返回了数据。

更改自:

m.name LIKE any (array['$media_names'])

到这里:

m.name LIKE any (array[$media_names])

【讨论】:

    猜你喜欢
    • 2020-08-28
    • 2019-07-26
    • 1970-01-01
    • 2018-12-29
    • 2017-03-24
    • 2020-08-17
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    相关资源
    最近更新 更多