【发布时间】:2015-03-16 18:06:56
【问题描述】:
我有两个 MySQL 表,一个包含订阅者详细信息,另一个用于跟踪谁收到了电子邮件、哪个活动、哪个版本等(分别是爬虫和 sent_mail。)我已经建立了一个可以通过爬虫表并基于 SendGrid API、Web 表单和一些 javascript 发送电子邮件的脚本。但我试图弄清楚如何告诉脚本从爬虫表中提取电子邮件,这些电子邮件没有在 sent_mail 表中列出当前活动。我知道我必须使用连接,但我不确定如何将逻辑构建到查询中。想法?我的尝试如下:
foreach ('SELECT crawler.email FROM crawler LEFT JOIN sent_mail ON crawler.email = sent_mail.email WHERE sent_mail.campaigns <> "$campaign"') as $address) as $address) {
$email = new SendGrid\Email();
$email
->addTo($address)
->setFrom($address)
->setSubject($title)
->setText($text)
->setHtml($text)
;
$sendgrid->send($email);
$db-> $query = "
INSERT INTO sent_mail (email, campaigns, campaign_version)
VALUES ($address, $campaign, $campaign_version)"; echo 'great success';
}
【问题讨论】:
-
您在这里使用什么应用程序或数据库框架?一般来说,使用字符串插值表示你做错了什么,因为你没有正确地escaping those variables。
-
我只是用普通的 PHP 编写这个,通过 PDO 访问 MySQL。它在我的本地服务器上运行,无法在整个互联网上使用,所以我不担心 SQL 注入。
-
对此不要随便。使用 PDO 正确地做到这一点并不难,并且如果此代码以某种方式投入生产,它会为您避免可能发生的破坏公司的错误。老实说,你在这里的马虎是没有任何借口的。 Prepared statements 真的很容易写。一旦有人在任何这些字符串中加上引号,你在这里所做的事情就会失败。