2011-05-08 20 views
1

我有一個名爲 'favoritecats' 具有以下字段的數據庫表:SQL刪除語法錯誤,也有一些PHP和jQuery

  • ID
  • catName
  • CATID

我使用Jquery在DOM Ready上的元素的單擊事件中運行此功能。

// Delete a Favorite Category from SQL Database 
    $('.deleteCatFavs').click(function(){  // On click of .deleteCatFavs 
    var actionRequested = "AJAX_delFavCat"; // My Personal PHP Controller Identifier 
    var url = "index.php";      // URL to post to 

// Now Im getting the data I want to post into variables. 
    var catId = $("input[name=FavCats]:checked").val(); 
    var rowId = $("input[name=FavCats]:checked").attr("id"); 

// Now we make the post 
    $.post(url, {AJAX_Action: actionRequested, rowId: rowId}, 
     function(data){ 
      $("#favCats").fadeIn().html(data); 
      }); 
    }); 

這一切工作正常,

但低於我有PHP代碼從上面從數據庫中刪除選定的ROWID。 這裏是即時通訊有問題,我確定其SQL錯誤。

public function AJAX_delFavCat(){ 

$rowId = isset($_POST['rowId'])?$_POST['rowId']:''; // Get Posted Variable 
// Below, I want to delete the posted rowId, from the DB, 
$this->database->query("DELETE FROM 'favoritecats' WHERE id='$rowId'"); 

// My personal Loaders, I need help with the delete query above!! 
$data = $this->database->query("SELECT * FROM favoritecats"); 
$this->load->view('Ajax_addToFavCats.php', $data, $ajax=1); 

} // End 

的 「DELETE FROM 'favoritecats' WHERE ID = '$ ROWID'」 不行,我究竟做錯了什麼?

[編輯]
我打通SQL以下錯誤: 您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊,在第一行使用''favoritecats'WHERE id = '27''使用正確的語法。

另外,如何使用$ .ajax方法編寫Jquery函數而不是現在使用的$ .post方法,它真的會有所作爲嗎?

+0

據我所知,$ .post只是一個簡寫$ .ajax函數。 – Mikk 2011-05-08 13:29:11

+0

嘗試在執行查詢之前檢查$ rowId的var_dump($ rowId)是否具有正確的ID。 – 2011-05-08 13:29:45

+0

嗨,是的,它拿起Jquery和PHP中的正確字符串,我測試了兩個,我確定它的刪除SQL語句,我得到以下錯誤。你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行的''favoritecats'WHERE id = '27''附近使用正確的語法。 – Anil 2011-05-08 13:35:29

回答

2

我做錯了什麼?

你有SQL注入安全漏洞。
請參閱:How does the SQL injection from the "Bobby Tables" XKCD comic work?

更改此

$rowId = isset($_POST['rowId'])?$_POST['rowId']:''; // Get Posted Variable 
// Below, I want to delete the posted rowId, from the DB, 
$this->database->query("DELETE FROM 'favoritecats' WHERE id='$rowId'"); 

對此

$rowId = isset($_POST['rowId'])?$_POST['rowId']:''; // Get Posted Variable 
$rowId = mysql_real_escape_string($rowId); 
// Below, I want to delete the posted rowId, from the DB, 
$this->database->query("DELETE FROM `favoritecats` WHERE id='$rowId'"); 

要正確地逃脫你的投入。

回到你的問題

$this->database->query("DELETE FROM `favoritecats` WHERE id='$rowId'"); 

將解決您的錯誤。
請注意表名附近的反引號的使用,正常引號是不允許的,實際上是syntax error

+0

謝謝!但是當我刪除一個行ID時,Div通過Ajax更新了HTML,並且Jquery不起作用,我不得不重新加載頁面,所以基本上,我只能刪除1個項目,並通過ajax重新加載,這就是我必須手動重新加載整個頁面才能刪除其他條目。任何想法爲什麼會發生這種情況, – Anil 2011-05-08 13:41:15

+0

@PHP_Guy,我認爲最好在一個新問題上提出問題,否則一切都會在這裏混亂:-)。 – Johan 2011-05-08 13:48:13

+0

很酷,謝謝! – Anil 2011-05-08 13:53:56

0

表名不應該在單引號中。使用反引號或保持原樣。

DELETE FROM 'favoritecats' - wrong 
DELETE FROM `favoritecats` - correct 
DELETE FROM favoritecats - also correct