Php 致命错误:允许的内存大小134217728字节已用尽(尝试分配35字节)

Php 致命错误:允许的内存大小134217728字节已用尽(尝试分配35字节),php,Php,我正试图在数据库中插入一些序列号。我已经为此定义了范围,并且我创建了一个函数,该函数返回最后一条记录,如果我已经插入了相关的序列号,则将其递增。但是,当我尝试递增结果时,代码中出现了一个错误。如果我对其进行硬编码,它可以正常工作,但当我尝试增加值时,它不能正常工作: $batch = $_POST['batch']; $serial=11111111; if(array_key_exists('batch',$_POST)){ $query="select serial from ser

我正试图在数据库中插入一些序列号。我已经为此定义了范围,并且我创建了一个函数,该函数返回最后一条记录,如果我已经插入了相关的序列号,则将其递增。但是,当我尝试递增结果时,代码中出现了一个错误。如果我对其进行硬编码,它可以正常工作,但当我尝试增加值时,它不能正常工作:

$batch = $_POST['batch'];
$serial=11111111;
if(array_key_exists('batch',$_POST)){
    $query="select serial from serials where serial like";
    $query.="'".$_POST['batch']."%'";
    $query.='order by serial DESC limit 0,1';
    $rs=mysql_query($query);
    while($row= mysql_fetch_assoc($rs)){
        $a =($row[serial]);
        $a = substr($a,0,2);// substring to match the string
        if($a == $batch){
        $a2 =($row[serial]);
        $a2 = substr($a2,2,-1);//substring to get the serial
        $serial =$a2;
        }
        else
        {
        $serial=11111111;
        };
    }
}
function createColumnsArray($end_column, $first_letters = ''){
    $columns = array();
    $length = strlen($v);
    $letters = range($serial,11111999); //(12847017, 12847027);
    foreach ($letters as $letter){
        $column = $first_letters.$_POST['batch'].$letter.'Z';
        $columns[].=$column;
        if ($column == $end_column)
        return $columns;
    }
    foreach ($columns as $column){
        if (!in_array($end_column, $columns) && strlen($column) < $length) {
        $new_columns = createColumnsArray($end_column, $column);
        // Merge the new columns which were created with the final columns array.
        $columns = array_merge($columns, $new_columns);
        }
    }
return $columns;
}
$batch=$\u POST['batch'];
$serial=11111111;
如果(数组\键\存在('batch',$\ POST)){
$query=“从序列中选择序列,其中序列类似”;
$query.=“'”$\u POST['batch']。“%”;
$query.='order by serial DESC limit 0,1';
$rs=mysql\u查询($query);
while($row=mysql\u fetch\u assoc($rs)){
$a=($row[序列]);
$a=substr($a,0,2);//匹配字符串的子字符串
如果($a==$batch){
$a2=($row[序列]);
$a2=substr($a2,2,-1);//获取序列号的子字符串
$serial=$a2;
}
其他的
{
$serial=11111111;
};
}
}
函数createColumnsArray($end\u column,$first\u letters=''){
$columns=array();
$length=strlen($v);
$letters=范围($serial,11111999);/(1284701712847027);
foreach($字母作为$字母){
$column=$first_letters.$_POST['batch'].$letter.Z';
$columns[]。=$column;
如果($column==$end\u column)
返回$columns;
}
foreach($columns作为$column){
if(!in_数组($end_column,$columns)&&strlen($column)<$length){
$new_columns=createColumnsArray($end_column,$column);
//合并使用最终列数组创建的新列。
$columns=array\u merge($columns,$new\u columns);
}
}
返回$columns;
}

这是因为您的内存限制

ini_set('memory_limit', '256M');
134217728字节=128 MB


<>或考虑重写一个有效的代码,以便它消耗更少的内存。 看看你问题右边的
相关的
。增加你分配给PHP的内存大小。在我看来,你有一种递归(在
createColumnsArray
内部调用
createColumnsArray
),它是无限的。我尝试了ini_集(“内存限制”,“128M”);但同样的错误;如果我将值硬编码为范围(1111119999);然后它可以正常工作,但下次我需要增加db中的数字。我在这里交换优先级。它不起作用,没有任何方法可以查看php消耗了多少内存?@user2042007@user2042007那么while循环可能无限运行。
Try...
Allowed memory size maximum. Put the code top of the file
ini_set('memory_limit', '-1');