gpt4 book ai didi

php - Swiftmailer:按用户 ID 进行 dbReplacements?

转载 作者:行者123 更新时间:2023-11-29 08:43:03 26 4
gpt4 key购买 nike

Swiftmailer 文档说您可以创建自己的类来使用装饰器插件处理替换:

class DbReplacements implements Swift_Plugins_Decorator_Replacements {
public function getReplacementsFor($address) {
$sql = sprintf(
"SELECT * FROM user WHERE email = '%s'",
mysql_real_escape_string($address)
);

$result = mysql_query($sql);

if ($row = mysql_fetch_assoc($result)) {
return array(
'{username}'=>$row['username'],
'{password}'=>$row['password']
);
}
}
}

但就我而言,我的数据库包含重复的电子邮件地址,即相同的地址可能会出现在 3-4 个帐户中,因此我需要根据用户 ID 获取替换地址。

如何修改上述类以符合我的条件?

最佳答案

由于swiftmailer不知道有关id的任何信息,因此您必须自己将电子邮件翻译为id。例如,向包含关联数组 'email' => 'id'DbReplacements 添加新属性(当然首先仅限于已知 ID,即 SELECT email, id FROM user WHERE id IN(1,3,6,77) )并在 getReplacementsFor 中只需使用电子邮件作为此数组中的索引即可获取用户 ID。

代码示例以使其更清晰:

class DbReplacements implements Swift_Plugins_Decorator_Replacements {
public $email2id = array();
public function getReplacementsFor($address) {
$sql = sprintf(
"SELECT * FROM user WHERE id = %d", $this->email2id[$address]
);

$result = mysql_query($sql);

if ($row = mysql_fetch_assoc($result)) {
return array(
'{username}'=>$row['username'],
'{password}'=>$row['password']
);
}
}
}

$dbReplacer = new DbReplacements();
$decorator = new Swift_Plugins_DecoratorPlugin($dbReplacer);
$mailer->registerPlugin($decorator);

$users = array(
array('email'=>'john.doe@example.com', 'id' => 16),
array('email'=>'john.doe2@example.com', 'id' => 13),
);

foreach ($users as $user) {
$message->addTo($user['email']);
$dbReplacer->email2id[$user['email']] = $user['id'];
}

关于php - Swiftmailer:按用户 ID 进行 dbReplacements?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13217217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com