警告:join()[function.join]:传递的参数无效(PHP / MySQL查询)

时间:2014-01-26 02:07:33

标签: php mysql sql

有谁能告诉我我的代码有什么问题?我收到错误消息“警告:join()[function.join]:传入的无效参数...”在最后一行 - echo join($ URL,'
');

我检查了this discussionthis one,但没有点击任何内容。我将查询粘贴到phpMyAdmin> SQL,它运行良好,返回一个包含两列的表,列出字段URL中的值,这些值包含多个实例以及实例数(例如Bill_Gates | 4)。

所以看起来我的代码肯定存在问题 - 除非食物链中的文件中存在错误,但我认为不太可能。

$stm = $pdo->prepare("select URL, count(*)
from ((SELECT 'GZ' AS GSiteID, NULL as Site, 'Life' AS GSection, GZL.Taxon AS URL
       FROM gz_life GZL WHERE GZL.Taxon = :MyURL
      ) UNION ALL
      (SELECT 'All' AS GSiteID, NULL as Site, 'World' AS GSection, GG.Name AS URL
       FROM gw_geog GG WHERE GG.Name = :MyURL
      ) UNION ALL
      (SELECT 'PX' AS GSiteID, Site, 'People' AS GSection, Ppl.URL
       FROM people Ppl WHERE Ppl.URL = :MyURL
      )
     ) t
group by URL
having count(*) > 1;");
 $stm->execute(array(
 'MyURL'=>$MyURL
 ));

while ($row = $stm->fetch())
{
 $URL = $row['URL'];
}

echo join( $URL, '<br>' );

P.S。我发布了var_dump($ URL);在上面脚本的最后,但它只显示字符串(9)“Zachaenus”,这对我没有任何意义。 (我认为Zachaenus是生命表中的科学名称。)但我之前从未使用过var_dump,所以也许我没有正确地做到这一点。

2 个答案:

答案 0 :(得分:3)

首先需要使用glue参数。

echo join( '<br>',$URL );
           ^^^^^  ^^^^   //<---- Order Interchanged 

或者,你可以使用implode来做同样的连接。

其次.. $URL必须是数组。

$URL = array();
while ($row = $stm->fetch())
{
 array_push($URL,$row['URL']);
}

答案 1 :(得分:2)

我的猜测join正在寻找array而不是string你正在给它,gluepieces翻转了尝试以下

joinimplode的别名,正在寻找join|implode( string $glue , array $pieces )

while ($row = $stm->fetch()){
    $URL[] = $row['URL'];
       #^^
}

echo join('<br>', $URL);

$URL[]这将为您提供一个数组,而不是每次while循环执行时都被替换的字符串,只提供$ row中的最后一个元素。

根据此Problem with: Fatal error: [] operator not supported for strings,它表示您可能已将$URL初始化为stringarray以外的其他类型,并需要将其更改为{ {1}}或使用其他变量名称。