[英]Post not passing array in postgres query
我的目標是從html表單中發布多個選定的選項作為php查詢中的變量。 我相信將選擇標記ID設置為使用方括號的數組應允許通過多個選擇,但是我擔心的是,它們的格式設置不符合查詢將數據識別為數組的方式。 當前結果僅顯示帖子中最后選擇的選項的響應。
這是表單中的select標記(請注意,它是由一個單獨的查詢填充的,也許有人可以在此處說明如何將格式添加到菜單變量中……應采用這種格式……“ COMM_0001%”,“ COMM_0002%',依此類推:
<select multiple name="userMedia" class="form-control" id="userMedia[]"
style="height:350px;">
<?php
$conn = pg_connect("database login data deleted");
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>
這是此數據發布到的查詢...
$datea= $_POST["userDatea"];
$media= $_POST['userMedia'];
$datez= $_POST["userDatez"];
if( !empty($_SERVER['REQUEST_METHOD']) &&
(strcasecmp($_SERVER['REQUEST_METHOD'], 'post')===0) ) {
// Create connection
$conn = pg_connect("Connect Info Deleted");
// 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%']) 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;
}
$media
是一個數組。 您不能將數組直接替換為字符串(它只是將單詞Array
放在此處)。 您應該使用implode()
將其轉換為逗號分隔的列表。 您還需要在每個名稱周圍加上引號,並對其進行轉義以防止SQL注入。
$media_names = implode(',', array_map(function($n) use ($conn) {
return "'" . pg_escape_string($conn, $n) . "'";
}, $media);
然后,您可以將media_names
替換為查詢,而不是$media
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.