2012-11-22 164 views
0

因此,我在TAFE上創建了一個站點(來自模板和給定的鏈接/數據庫),所以我無法編輯我的數據庫。 Anywho,當我加載我的網頁,我得到一個語法錯誤關於 '@' 符號旁邊什麼:在數據庫中使用at符號(@)

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@com.au' at line 1 

我的代碼是:

mysql_select_db($database_sim6a2010, $sim6a2010); 
$query_Recordset1 = "SELECT * FROM employeeproject WHERE projectID=" . $_GET['projectID']; 
$Recordset1 = mysql_query($query_Recordset1, $sim6a2010) or die(mysql_error()); 
$row_Recordset1 = mysql_fetch_assoc($Recordset1); 
$totalRows_Recordset1 = mysql_num_rows($Recordset1); 

mysql_select_db($database_sim6a2010, $sim6a2010); 
$query_Recordset2 = "SELECT * FROM project WHERE projectID=" . $_GET['projectID']; 
$Recordset2 = mysql_query($query_Recordset2, $sim6a2010) or die(mysql_error()); 
$row_Recordset2 = mysql_fetch_assoc($Recordset2); 
$totalRows_Recordset2 = mysql_num_rows($Recordset2); 

mysql_select_db($database_sim6a2010, $sim6a2010); 
$query_Recordset3 = "SELECT employee.name, employeeproject.hours, employee.imgLocation FROM employee, employeeproject WHERE email=" . $row_Recordset1["email"]; 
$Recordset3 = mysql_query($query_Recordset3, $sim6a2010) or die(mysql_error()); 
$row_Recordset3 = mysql_fetch_assoc($Recordset3); 
$totalRows_Recordset3 = mysql_num_rows($Recordset3); 

我要在這裏指出,I DO不像使用mysql,我被告知在這個論壇上不使用它(我不會),但這是我們正在使用和必須使用的。 除了我不喜歡Dreamweaver的巨大「Chuck毫無意義的代碼在你的頁面上」,但我們被告知我們必須使用Dreamweaver的記錄集和GUI的東西。

Anywho,從而得到錯誤的部分是:

$query_Recordset3 = "SELECT employee.name, employeeproject.hours, employee.imgLocation FROM employee, employeeproject WHERE email=" . $row_Recordset1["email"]; 

它的電子郵件一部分,你會懷疑,充滿了像「薩姆@ COM」和東西的東西,這是造成錯誤,我該如何讓PHP知道數據庫中的@ sybmols不是代碼?

希望我已經提供了足夠的信息。我決定提出要求,因爲涉及at號(@)的任何搜索都會將其用作代碼。

+0

您應該使用參數化查詢。這將解決你在這裏的問題,它會保護你免受SQL注入。 http://bobby-tables.com/php.html有例子。此外,'mysql_'函數已被棄用,不應再使用。 –

回答

1

你需要把字符串數據在單引號是這樣的:

$query_Recordset3 = "SELECT employee.name, employeeproject.hours, employee.imgLocation FROM employee, employeeproject WHERE email='" . $row_Recordset1["email"] . "'"; 
+0

我剛剛嘗試過,但得到「列'電子郵件'在哪裏子句是模棱兩可的」作爲錯誤 – DBeslan

+1

@DBeslan哪些表是你想匹配'電子郵件'反對?前綴'email'與表名稱'employee.email'。此外,更大的問題是您從兩個表中進行選擇,但查詢中沒有任何內容連接它們。 –

1

您需要報價添加到$row_Recordset1["email"],因爲它是一個字符串

$query_Recordset3 = "SELECT employee.name, employeeproject.hours, employee.imgLocation FROM employee, employeeproject WHERE email='" . $row_Recordset1["email"]."'"; 

注:

唐不使用mysql_ *函數。 Ther將很快棄用。使用PDO或mysqli函數。

還要小心爲SQL Injection您的代碼看起來很脆弱。

+0

我剛剛嘗試過,但得到了「列'電子郵件'在哪裏是不明確的」作爲錯誤 – DBeslan

0

問題#1由@G-Nugget@Muthu Kumaran處理 - 將email用單引號''表示。

$query_Recordset3 = "SELECT employee.name, employeeproject.hours, employee.imgLocation FROM employee, employeeproject WHERE email='" . $row_Recordset1["email"] . "'"; 

問題#2 - 「列'電子郵件'中where子句不明確」。您正在從兩個表中抽取字段employee & employeeproject,但不指定email的哪個表。

$query_Recordset3 = "SELECT employee.name, employeeproject.hours, employee.imgLocation FROM employee, employeeproject WHERE employee.email='" . $row_Recordset1["email"] . "'"; 

雖然更好的方式來做到這一點查詢與JOIN

$query_Recordset3 = "SELECT employee.name, employeeproject.hours, employee.imgLocation FROM employee LEFT JOIN employeeproject ON employee.name=employeeproject.name WHERE employee.email='" . $row_Recordset1["email"] . "'"; 
相關問題