Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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
mysql查询查询(使用php/mysql)_Php_Mysql_Sql - Fatal编程技术网

mysql查询查询(使用php/mysql)

mysql查询查询(使用php/mysql),php,mysql,sql,Php,Mysql,Sql,我正在创建一个面板,用户可以在其中选择一个联系人组,然后安排邮件。 为了跟踪发送的邮件,我将其存储到数据库中。 但是,在表中存储数据需要很长时间,因为循环会生成大约1000多个insert查询,这使得页面无法响应,无法将数据填充到表中。 这只适用于单个用户,如果一次有10个用户执行相同的操作,会导致应用程序性能低下 我需要知道是否有任何机制使用“mysql”和“php”来查询,以便稍后可以执行,用户不应该等待查询执行完成 我的代码如下: $recordsCounter++; //insert i

我正在创建一个面板,用户可以在其中选择一个联系人组,然后安排邮件。 为了跟踪发送的邮件,我将其存储到数据库中。 但是,在表中存储数据需要很长时间,因为循环会生成大约1000多个insert查询,这使得页面无法响应,无法将数据填充到表中。 这只适用于单个用户,如果一次有10个用户执行相同的操作,会导致应用程序性能低下

我需要知道是否有任何机制使用“mysql”和“php”来查询,以便稍后可以执行,用户不应该等待查询执行完成

我的代码如下:

$recordsCounter++;
//insert into EMAIL_RECIPIENTS
foreach($this->recipients as $val){         
$query="INSERT INTO bas_email_recipients SET
                recipient_type='".$val['recipientType']."', 
                email_dump_id='".$emailDumpId."', ";
        if(isset($val['contactDetailsId'])){
            $query.="contact_details_id='".$val['contactDetailsId']."', ";  
        }
        if(isset($val['contactName'])){
            $query.="recipient_name='".$val['contactName']."', ";
        }

        $query.="email_address='".$val['emailAddress']."', 
                mail_to='".$val['mailTo']."'";  

        if($db->query($query)>0){
            $recordsCounter++;
        }           
    }

例如,您可以将该查询放入缓存,并在cron上检索/执行/删除它们

而不是

if($db->query($query)>0){ // putting to database
    $recordsCounter++;
}
将查询放入数组

$queryList[] = $query;
然后使用某个唯一密钥将此数组放入缓存:

$cache->put('key', $queryList);
安装cron作业,例如每分钟执行一次:

$queryList = $cache->get('key');
if ($queryList) {
    foreach ($queryList as $query) {
        $db->query($query);
    }
}

繁重的数据库操作将在后台的cron中执行,因此您的web将获得更好的性能

显示您的表和查询方式。有几个选项,如您所说的队列,但很可能已经可以对您所拥有的进行优化。删除整个数据库大约需要5秒钟。使用预先准备好的语句。@Jonast我没听懂你的意思?我假设你正在从客户端接收用户输入,对吗?我假设您通常将输入连接到查询,然后在数据库上运行,对吗?这意味着我可以将我想要的任何东西注入到您的查询中,例如,注入一个脚本来删除整个数据库。您可以使用预先准备好的语句轻松避免这种情况。有趣的是,我们有“2627如何防止PHP中的SQL注入?”作为右边的相关主题。@Andrey你能用任何例子来澄清它吗?给我看看你现有的代码,我会根据我的想法修改它idea@Andrey检查一下,我已经用代码回答了这个问题。我不知道如何使用缓存操作,因为我是新手。你能解释一下如何使用缓存操作吗?