PHP使用mysql查询中邮件接收者的结果字段值

PHP使用mysql查询中邮件接收者的结果字段值,php,Php,我需要此PHP脚本的帮助: <?php $link = mysql_connect('localhost', 'Username', 'PW'); $sql = "SELECT Driver, Mail FROM mytable"; $query = mysql_query($sql); $emailBody=""; $Subject="test"; $to ="xxx"; while($row = mysq

我需要此PHP脚本的帮助:

<?php
$link = mysql_connect('localhost', 'Username', 'PW');
$sql = "SELECT Driver, Mail FROM mytable";
$query = mysql_query($sql);
$emailBody="";
$Subject="test";
$to ="xxx";

while($row = mysql_fetch_assoc($query))
{
  $emailBody .= "Driver:   ".$row['Driver']."\n";
}

$to = str_replace('xxx', $row['Mail'], $to);
mail($to, $Subject, $emailBody);
我无法将第['Mail']行的字段值设置为收件人地址。 字段值已通过“测试”mymail@mail.com“还有”mymail@mail.com"及mymail@mail.com

替换功能只是另一种尝试

$to =str_replace('xxx',$row['Mail'],$to);
除了仅用于测试的硬编码外,其他功能都不起作用

mail("mymail@mail.com", $Subject, $emailBody);

谢谢

$row
仅存在于循环内部(即
{
}
内部)。但是您的
$to
行存在于循环之外,因此它无法访问
$row
中的任何值

如您在评论中所述,如果您希望为查询结果的每一行生成单独的电子邮件,则

a) 您需要在循环中移动设置收件人和发送邮件的代码,以便它可以访问行数据,并且每行执行一次

b) 您不需要将正文与每一行的数据连接在一起,否则第一行之后的每封电子邮件都将包含前几行以及当前行的详细信息

这应该更好地发挥作用:

$link = mysql_connect('localhost', 'Username', 'PW');
$sql = "SELECT Driver, Mail FROM mytable";
$query = mysql_query($sql);
$Subject="test";

while($row = mysql_fetch_assoc($query))
{
  $emailBody = "Driver:   ".$row['Driver']."\n";
  mail($row['Mail'], $Subject, $emailBody);
}


另外,正如我在评论中提到的,您需要用mysqli或PDO替换过时的
mysql\ucode>调用,并紧急升级到受支持的PHP版本。我还建议使用像
PHPMailer
这样的库来处理电子邮件发送-它比
mail()
更容易处理,并且更有可能生成有效的电子邮件,而不会意外地被阻止为垃圾邮件等。它还可以支持SMTP where mail()仅支持通过sendmail的本地邮件服务器。

到底是什么问题?邮件发错地址了吗?尝试发送时是否出现错误?循环的正文仅为
{$emailBody.=“Driver:”.$row['Driver'].“\n”}
,其他所有内容在循环完成后执行。当然,$row只是
false
。为什么要使用长期不推荐的
mysql\ucode>代码库?它在许多年前就已经停止使用,并在PHP7中被完全删除。不应使用此库编写新代码。它会使您容易受到SQL注入攻击(由于缺少参数化查询支持)和其他潜在的未修补漏洞的攻击。尽快切换到使用
mysqli
PDO
,然后学习如何编写参数化查询以保护数据免受恶意输入。有关风险的简单解释和安全编写查询的一些PHP示例代码,请参阅。此外,如果您成功运行
mysql\uuu
查询,则表明您正在运行不受支持的PHP版本。您应该立即升级PHP版本,以继续接收安全更新。警告:
mysql.*
扩展从PHP5.5.0开始就被弃用,从PHP7.0.0开始就被删除。相反,应该使用或扩展名。在选择MySQL API时,请参阅,以获得更多帮助。现在我似乎很清楚,{和}定义了循环。在你更正我最初的帖子时,你只是把$emailbody和{和}放在一起,这让我很困惑。现在我了解了循环语句是如何绑定在一起的。我将立即使用mysqli。但我仍然不知道邮件地址应该如何传递给函数:带引号、双引号或不带引号,就像mymail@mail.com?
在您更正我最初的帖子时,您刚刚在$emailbody中加入了{and}
…这是我编辑您的问题以使其更清楚,未提供解决方案或未更正代码。这是StackOverflow中的两个不同进程<代码>我仍然不知道邮件地址应该如何传递给函数
…然后阅读文档并查看在线提供的许多示例,包括那里的示例和教程中的示例。从文档开始:无论如何,如果这个答案帮助您解决了问题,请记住将其标记为“已接受”(单击旁边的勾号,使其变为绿色)-谢谢。另见
$link = mysql_connect('localhost', 'Username', 'PW');
$sql = "SELECT Driver, Mail FROM mytable";
$query = mysql_query($sql);
$Subject="test";

while($row = mysql_fetch_assoc($query))
{
  $emailBody = "Driver:   ".$row['Driver']."\n";
  mail($row['Mail'], $Subject, $emailBody);
}