我有一个包含30k项目的数组,而implode什么都不返回。没有错误信息,没有内存问题,只是没有。
如果我使用array_slice
并将数组切成100个项目,那么它可以正常工作。它也适用于7k阵列,但不适用于此。
然而,在another topic中我找到了这个代码,它运行得很好:
$arr = array();
for ($i = 0; $i < 50000; $i++) {
$arr[] = str_shuffle('This sentance is of average length, which The Internet says is aboout 14.2 words.');
}
echo implode(PHP_EOL, $arr);
但是使用PHP_EOL我不能在我的选择中使用它,字符串需要用','分隔。
所以我有两个问题:有没有办法使这项工作,我怎么能抓住这个错误?因为测试implode输出不起作用,is_null,strlen,is_string,empty,isset,所有这些测试都失败了。
答案 0 :(得分:1)
<?
$questionMarks =implode(',',array_fill(0,sizeof($myarray),'?'));
?>
看看你是否有更多的运气。
您可以使用参数化查询来规避您的问题。
<?php
$db = new PDO(...);
//$myarray is some random sized php array of potential myid values
$questionMarks='';
//check to see if runtime is acceptible for your applicaition
for ($i = 0; sizeof($myarray); $i++)
$questionMarks=",?";
$questionMarks=substr($questionMarks,1,strlen($questionMarks)-1);
/* you could try implode(',',array_fill(0,sizeof($myarray),'?')) but as you said implode might not work */
$sql = 'select myfield from mytable where myid in ('.$questionMarks.')';
$sth = $db->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute($myarray);
if (!$sth) {
echo "\nPDO::errorInfo():\n";
print_r($db->errorInfo());
}
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
echo $row['myfield'] . "<br />";
}
?>