2011-10-01 93 views
2

我正在研究一個腳本,允許訪問者輸入他們的電子郵件地址以接收其他用戶上傳的照片時的通知。出於測試目的,我用這個代碼來查詢只是我的「電子郵件」表,它完美的作品,當一個新的照片被上傳:具有多表查詢功能的PHP郵件功能

$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,所以我懷疑我失去了明顯的東西。我會很感激任何更正。謝謝。

+0

我認爲問題是你沒有以任何方式加入表格。你能否顯示錶格結構,哪些列將人與電子郵件聯繫起來? – Mark

+0

「person.event」和「email.event」列是否與表格相關聯? – Mark

回答

0

假設你的查詢是正確的,去抓取你所需要的數據,我發現一個問題是,你得到從MySQL結果數組的email.email會員,你應該只得到

$電子郵件= $信息[ '電子郵件'];

mysql結果中沒有表名空間...所以如果你必須要求兩個同名的字段,你必須使用一個AS子句,並重命名其中的一個。

此外,您可以使用「print_r」php函數來輸出提取的數組並調試您的代碼。

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)