【问题标题】:Select from table where clause from array from another table从另一个表的数组中从表中选择 where 子句
【发布时间】: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) ."')"; 仍然给出数组到字符串的转换错误。

标签: php mysql arrays mysqli


【解决方案1】:

注意$periodedatoer 是一个数组数组。里面的每个元素都有一个dato 的键(正如你var_dump 显示的那样)。

所以使用array-column 获取值,然后使用implode 作为:

$rapportdato = implode("','", array_column($periodedatoer, "dato"));

现在您可以在第二个查询中使用$rapportdato

$rapportdatoer = "select fradato, tildato from gramorapportlogg WHERE  fradato IN('" . $rapportdato . "') OR tildato IN('" . $rapportdato . "')";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-10
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 2015-02-28
    相关资源
    最近更新 更多