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