【发布时间】:2019-06-20 17:23:44
【问题描述】:
我正在尝试在代码中插入故障保护以防止它们更进一步,而我现在一直在摸不着头脑。我可以将某些内容放入数组中,但无法从数组中获取项目以匹配第二个选择查询。我只得到 Array 而不是 item 中的值。
我的第一个选择查询是这样的:
$datohenter3 = "select DATE_FORMAT(datotid, '%Y.%m.%d') AS dato from gramorapport34 group by dato order by dato asc";
$hentdatoer = $db->query($datohenter3);
$periodedatoer = array();
for ($x = 1; $x <= $db->affected_rows; $x++) {
$periodedatoer[] = $hentdatoer->fetch_assoc();
}
然后我想将此数组中的值与我的下一个选择查询匹配:
$rapportdatoer = "select fradato, tildato from gramorapportlogg WHERE fradato IN('".$periodedatoer."') OR tildato IN('".$periodedatoer."')";
$rapportdatoeksist = $db->query($rapportdatoer);
if ( !$rapporteksist ) die('Database Error: '.$db->error);
while($row = mysqli_fetch_array($rapportdatoeksist))
{
print_r($row);
}
我得到的错误是:
注意:第二次选择的数组到字符串的转换
数据库错误:您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“fradato IN('Array') OR tildato IN('Array')' 附近使用正确的语法
我不是 JOIN SELECT 查询方面的专家。这是使用 MariaDB 10.3.12 和 PHP7.2
var_dump 位于:https://www.lokalradio.no/rapport/gramo/datohenttest.php
【问题讨论】:
-
$periodedatoer是一个数组 - 选择要在第二个查询中插入的字段并使用implode(",", $periodedatoer) -
我在第一个选择查询中执行 DATE_FORMAT 的原因是因为我想将 dato 输出净化为与另一个表中的 dato 格式相同的格式。
-
如果我这样做:
$rapportdato=implode(",", $periodedatoer);然后在第二个查询中使用 IN('".$rapportdato."') 我得到同样的错误,它只能放入 Array 中选择查询。我想从我得到的数组中放入 dato。 -
试试
$rapportdato=implode("','", $periodedatoer);(注意implode中的')。然后在SELECT -
这一行
$rapportdatoer = "select fradato, tildato from gramorapportlogg WHERE lokalradio=$radiokanal AND fradato IN('". implode("','", $periodedatoer) ."') OR tildato IN('". implode("','", $periodedatoer) ."')";仍然给出数组到字符串的转换错误。