Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在阵列中存储大量数据的最佳方式是什么?_Php_Mysql_Arrays_Database - Fatal编程技术网

Php 在阵列中存储大量数据的最佳方式是什么?

Php 在阵列中存储大量数据的最佳方式是什么?,php,mysql,arrays,database,Php,Mysql,Arrays,Database,我有100000个联系人的数据库 我有一个多选框,我想用它来选择要添加到特定邮件列表中的联系人 我的问题是,我目前正在MySQL中以序列化数组格式(PHP)存储邮件列表的数据 当我在一定数量的联系人上进行选择时,某些内容似乎会中断(我假设内存不足),并且不会更新阵列 在MySQL中是否有存储大型数组的最佳方法,在PHParray()中是否有保持低内存使用率的最佳方法 代码示例 if(isset($_POST['add'])) { $name = $core->EscapeStrin

我有100000个联系人的数据库

我有一个多选框,我想用它来选择要添加到特定邮件列表中的联系人

我的问题是,我目前正在MySQL中以序列化数组格式(PHP)存储邮件列表的数据

当我在一定数量的联系人上进行选择时,某些内容似乎会中断(我假设内存不足),并且不会更新阵列

在MySQL中是否有存储大型数组的最佳方法,在PHP
array()
中是否有保持低内存使用率的最佳方法

代码示例

if(isset($_POST['add'])) {
    $name = $core->EscapeString($_POST['name']);
    $desc = $core->EscapeString($_POST['desc']);
    foreach($_POST['addSelect'] as $null => $id) {
        if(!in_array($id, $recipientArray)) {
            $recipientArray[] = $id;
        }
    }
    $contacts->updateML($lid, $name, $desc, serialize($recipientArray));
}
else if(isset($_POST['rm'])) {
    $name = $core->EscapeString($_POST['name']);
    $desc = $core->EscapeString($_POST['desc']);
    foreach($recipientArray as $null => $id) {
        foreach($_POST['rmSelect'] as $null1 => $id1) {
            if($id == $id1) {
                unset($recipientArray[$null]);
            }
        }
    }
    $contacts->updateML($lid, $name, $desc, serialize($recipientArray));
}
UpdateML函数

//Class 3, Function 16
function updateML($lid = '', $name = '', $desc = '', $recip = '') {
    global $MySQLi;
    $query = "UPDATE `mailing_lists` SET `name` = '".$name."', `desc` = '".$desc."', `recipients` = '".$recip."' WHERE `list_id` = '".$lid."' LIMIT 1";
    $commit = $MySQLi->query($query);
    if($commit == false) {
        die("Issues with the database were detected. Please email peter@domain.com quoting error code: <strong>CLASS3/16.1</strong>.");
    }
    else
    {
        return true;
    }
}
//类3,函数16
函数updateML($lid='',$name='',$desc='',$recip=''){
全球$MySQLi;
$query=“UPDATE`mailing\'lists`SET`name`='”、`desc`='”、`desc`='”、`recipients`='”、$recip.”其中`list\'id`='”、$lid.“$lid 1”;
$commit=$MySQLi->query($query);
如果($commit==false){
检测到数据库问题。请发送电子邮件peter@domain.com引用错误代码:CLASS3/16.1);
}
其他的
{
返回true;
}
}

您需要两张表。一个用于邮件列表定义,一个用于收件人。在recipients表中,您需要有一个将记录与相应的邮件列表关联的外键

所以邮件列表表如下所示:

ml_id
name
desc
r_id
email
ml_id
收件人如下所示:

ml_id
name
desc
r_id
email
ml_id
首先将邮件列表添加到数据库:

INSERT INTO mailing_lists SET name = 'my first list', desc = 'mailsareus'
添加新收件人时,只需将新行添加到收件人表:

INSERT INTO recipients SET email = 'xxx@mail.com', ml_id = 1
如果需要从邮件列表中获取所有收件人和定义,只需使用join

SELECT * FROM mailing_lists JOIN recipients ON recipients.ml_id = mailing_lists.ml_id

你需要两张桌子。一个用于邮件列表定义,一个用于收件人。在recipients表中,您需要有一个将记录与相应的邮件列表关联的外键

所以邮件列表表如下所示:

ml_id
name
desc
r_id
email
ml_id
收件人如下所示:

ml_id
name
desc
r_id
email
ml_id
首先将邮件列表添加到数据库:

INSERT INTO mailing_lists SET name = 'my first list', desc = 'mailsareus'
添加新收件人时,只需将新行添加到收件人表:

INSERT INTO recipients SET email = 'xxx@mail.com', ml_id = 1
如果需要从邮件列表中获取所有收件人和定义,只需使用join

SELECT * FROM mailing_lists JOIN recipients ON recipients.ml_id = mailing_lists.ml_id

你需要两张桌子。一个用于邮件列表定义,一个用于收件人。在recipients表中,您需要有一个将记录与相应的邮件列表关联的外键

所以邮件列表表如下所示:

ml_id
name
desc
r_id
email
ml_id
收件人如下所示:

ml_id
name
desc
r_id
email
ml_id
首先将邮件列表添加到数据库:

INSERT INTO mailing_lists SET name = 'my first list', desc = 'mailsareus'
添加新收件人时,只需将新行添加到收件人表:

INSERT INTO recipients SET email = 'xxx@mail.com', ml_id = 1
如果需要从邮件列表中获取所有收件人和定义,只需使用join

SELECT * FROM mailing_lists JOIN recipients ON recipients.ml_id = mailing_lists.ml_id

你需要两张桌子。一个用于邮件列表定义,一个用于收件人。在recipients表中,您需要有一个将记录与相应的邮件列表关联的外键

所以邮件列表表如下所示:

ml_id
name
desc
r_id
email
ml_id
收件人如下所示:

ml_id
name
desc
r_id
email
ml_id
首先将邮件列表添加到数据库:

INSERT INTO mailing_lists SET name = 'my first list', desc = 'mailsareus'
添加新收件人时,只需将新行添加到收件人表:

INSERT INTO recipients SET email = 'xxx@mail.com', ml_id = 1
如果需要从邮件列表中获取所有收件人和定义,只需使用join

SELECT * FROM mailing_lists JOIN recipients ON recipients.ml_id = mailing_lists.ml_id

100000条记录不是“大数据”的公平点。措辞不正确已编辑。如果您正在将数据序列化到MySQL,则可能是做错了。您可以使用
SplFixedArray
来降低内存占用。但是,如果您使用关系数据库,那么在其中保存序列化数据是没有意义的。你把法拉利变成了Trabant,这样,它就变成了一个美化的文本文件。解决问题的真正办法是规范化数据。由于内存不足或其他原因,将所有信息粘贴到数组中的所有其他尝试都会在某个时候导致失败。正如@N.B.所述,最好的方法是规范化数据和数据库。因此,将每个
id
保存在一个单独的记录中。不要害怕你的桌子会变得很大。在一个
mysql
数据库中拥有数百万条记录并不重要。10万条记录不是“大数据”的公平点。措辞不正确已编辑。如果您正在将数据序列化到MySQL,则可能是做错了。您可以使用
SplFixedArray
来降低内存占用。但是,如果您使用关系数据库,那么在其中保存序列化数据是没有意义的。你把法拉利变成了Trabant,这样,它就变成了一个美化的文本文件。解决问题的真正办法是规范化数据。由于内存不足或其他原因,将所有信息粘贴到数组中的所有其他尝试都会在某个时候导致失败。正如@N.B.所述,最好的方法是规范化数据和数据库。因此,将每个
id
保存在一个单独的记录中。不要害怕你的桌子会变得很大。在一个
mysql
数据库中拥有数百万条记录并不重要。10万条记录不是“大数据”的公平点。措辞不正确已编辑。如果您正在将数据序列化到MySQL,则可能是做错了。您可以使用
SplFixedArray
来降低内存占用。但是,如果您使用关系数据库,那么在其中保存序列化数据是没有意义的。你把法拉利变成了Trabant,这样,它就变成了一个美化的文本文件。解决问题的真正办法是规范化数据。由于内存不足或其他原因,将所有信息粘贴到数组中的所有其他尝试都会在某个时候导致失败。正如@N.B.所述,最好的方法是规范化数据和数据库。因此,将每个
id
保存在一个单独的记录中。不要害怕你的桌子会变得很大。在一个
mysql
数据库中拥有数百万条记录并不重要。10万条记录不是“大数据”的公平点。措辞不正确如果您正在将数据序列化到MySQL中,则可能