Hon*_*nza 6 php arrays limit implode
我有一个包含30k项目的数组,而implode什么都不返回.没有错误信息,没有内存问题,什么都没有.
如果我使用array_slice并将数组切片为100个项目,它可以正常工作.它也适用于7k阵列,但不适用于此阵列.
但是,在另一个主题中我找到了这个代码,它运行得很好:
$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);
Run Code Online (Sandbox Code Playgroud)
但是使用PHP_EOL我不能在我的选择中使用它,字符串需要用','分隔.
所以我有两个问题:是否有任何方法可以使这项工作,我怎么能抓住这个错误?因为测试implode输出不起作用,is_null,strlen,is_string,empty,isset,所有这些测试都失败了.
编辑:写完这个答案后捂脸,添加一个 for 循环来制作?标记似乎并不比仅仅使用它来输出数据更好。无论如何我想你可以尝试
<?
$questionMarks =implode(',',array_fill(0,sizeof($myarray),'?'));
?>
Run Code Online (Sandbox Code Playgroud)
看看这是否会给你带来更多的运气。
您可以使用参数化查询来规避您的问题。
<?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 />";
}
?>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
769 次 |
| 最近记录: |