2013-03-16 189 views
2

我做的代碼,試圖在我的論壇上用戶活動的手冊,當我在這行添加您的SQL語法有錯誤;檢查對應於你的MySQL服務器

$cat_id = $db->fetch("SELECT name FROM " . $prefix . "_categories WHERE id =" . mysql_real_escape_string($forum_data['cat_id'])); 
$page_title_pro = ' > ' . $system->present($cat_id['name']) . ' > ' . $system->present($forum_data['name']) . ''; 

我得到

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 's Treasures > Contests' WHERE id = '2'' at line 1 

我假設2是我的用戶ID和頁腳,我有這樣的:

$db->query("UPDATE accounts SET flocation = '$session_location', page = '$page_title_pro' WHERE id = '$id';"); 

我似乎無法找出錯誤,和每一個恢復到正常的時候我走了CAT_ID,BU那麼我不能使用當前活動的配置文件。有什麼建議麼?

+0

什麼是'$ prefix'內容? – 2013-03-16 03:17:55

+0

您正在檢索的值有一個'in'。你的SQL語法有錯誤;檢查與您的MySQL服務器版本對應的手冊,以便在第1行使用** near'Treasures **> Contests'WHERE id ='2''。這是'name'的數據,它將它搞亂。 – 2013-03-16 03:19:12

+0

$前綴是表前綴,這是論壇@MarioWenig:我找不到我的代碼的任何行這是頁腳代碼,但我該如何改變它? – Malik 2013-03-16 03:20:25

回答

3

更新語法沒有問題。問題在於你想要在包含單引號的特定列上設置的值,這會導致破壞更新語法。在傳遞查詢之前,您需要轉義值中的單引號。一種可能的方式是使用

mysql_real_escape_string

$val1 = mysql_real_escape_string($session_location); 
$val2 = mysql_real_escape_string($page_title_pro); 
$val3 = mysql_real_escape_string($id); 
$db->query("UPDATE accounts SET flocation = '$val1', page = '$val2' WHERE id = '$val3'"); 

另一個(較好的)是利用PreparedStatementsPDOMySQLi擴展),你就可以擺脫周圍使用值的單引號。

+0

不客氣':D' – 2013-03-16 03:31:21

3

mysql_real_escape_string您輸入的值更新查詢,其$page_title_pro來自中有一個前面的查詢。

相關問題