具有多表查询的PHP邮件功能

时间:2011-10-01 22:01:39

标签: php mysql

我正在编写一个脚本,允许访问者输入他们的电子邮件地址,以便在其他用户上传照片时收到通知。出于测试目的,我使用此代码仅查询我的“电子邮件”表,并在上传新照片时完美运行:

$data = mysql_query("SELECT email
    FROM email");


if(! $data )
{
die('Could not get data: ' . mysql_error());
}
if($info = mysql_fetch_array($data, MYSQL_ASSOC))
$email=$info['email'];
{

mail($email, 'Test Email', $message);

但是,必要的查询将涉及2个表格(用于比较在上传照片期间标记的信息与希望接收电子邮件的用户提供的信息)。但是,当我使用以下查询时,不会发送任何电子邮件。

$data = mysql_query("SELECT person.event, person.name, email.event, email.name, email.email
    FROM person, email
    WHERE '$event' = email.event and '$name' = email.name");


if(! $data )
{
die('Could not get data: ' . mysql_error());
}
if($info = mysql_fetch_array($data, MYSQL_ASSOC))
$email=$info['email.email'];
{

mail($email, 'Test Message', $message);

我对php很新,所以我怀疑我错过了一些明显的东西。我很感激任何更正。感谢。

2 个答案:

答案 0 :(得分:0)

假设你的查询是正确的,并获取你需要的数据,我发现一个问题是你从mysql结果数组中获得了一个email.email成员,你应该只得到

  

$电子邮件= $信息[ '电子邮件'];

mysql结果中没有表命名空间...所以如果你要求两个具有相同名称的字段,你必须使用AS子句,并重命名其中一个。

此外,您可以使用“print_r”php函数输出获取的数组并调试代码。

答案 1 :(得分:0)

您的问题是您正在两个表上进行交叉连接。

SELECT person.event, person.name, email.event, email.name, email.email
FROM person, email  //Implicit join syntax is evil.
WHERE '$event' = email.event and '$name' = email.name

永远不要使用隐式SQL '89连接语法,这是一种反模式 请改用显式连接语法 将查询更改为:

$event = mysql_real_escape_string($event);
$name = mysql_real_escape_string($name);

$sql = "SELECT p.event, p.name, e.event, e.name, e.email
FROM person p
INNER JOIN email e ON (e.person_id = p.id)
WHERE e.event = '$event' AND e.name = '$name' ";

您可能需要调整连接条件以匹配相关字段 例如如果你有emailaddress作为人的PK,你需要:

INNER JOIN email e ON (e.emailaddress = p.emailaddress)