2013-04-05 70 views
0

我對web開發很新,所以很有可能我在這裏做一些非常愚蠢的事情。MySQL錯誤:不正確的表名

我使用AJAX將數據發送到PHP文件,該文件將使用數據運行SQL命令來更新表。我正在處理編輯文章,所以我的PHP文件需要知道三件事:文章的原始名稱(供參考),新名稱和新內容。我也告訴它用戶正在看什麼頁面,以便知道要編輯哪個表格。

$('#save_articles').click(function() { 

    var current_page = $('#current_location').html(); 
    var array_details = {}; 
    array_details['__current_page__'] = current_page; 

     $('#article_items .article_title').each(function(){ 

      var article_name = $(this).html(); //The text in this div is the element name 
      var new_article_name = $(this).next('.article_content'); 
      new_article_name = $(new_article_name).children('.article_content_title').html(); 
      var new_article_content = $(this).next('.article_content'); 
      new_article_content = $(new_article_content).children('.article_content_content').html(); 

      array_new_deets = {new_name:new_article_name, content:new_article_content}; 
      array_details[article_name] = array_new_deets; 

     }); 

     send_ajax("includes/admin/admin_save_articles.php", array_details); 

    }); 

在PHP文件,我首先檢索當前頁面並將其存儲在$ sql_table,然後從$ _ POST刪除當前頁面的變量。然後我運行這個。

foreach($_POST as $key => $value){ 

     $original_name = $key; 
     $new_name = $value['new_name']; 
     $new_cont = $value['content']; 


     $query = "UPDATE 
         `$sql_table` 
        SET 
         `element_name`= '$new_name', 
         `element_content` = '$new_cont', 
        WHERE 
         `element_name` = '$original_name'"; 

     $query = mysql_query($query); 


     if(!$query){ 

       die(mysql_error()); 

      } 

    } 

我總是收到一個錯誤,說'sitep_Home'是一個不正確的表名。它不僅是我的數據庫中的一張真正的表格,而且實際上我更改了它的名稱以確保它不是關鍵字或其他內容的問題。

如果我在沒有變量$ sql_table的情況下運行查詢(指定該表稱爲「sitep_Home」),則該查詢接受該表。然後它並沒有實際更新表,我懷疑這是因爲WHERE參數也使用了一個變量。

任何人都可以看到我在做什麼錯在這裏?

感謝

+0

你確定'$ sql_table'變量中沒有空白嗎? – 2013-04-05 13:35:27

+0

'我首先檢索當前頁面並將其存儲在$ sql_table'中......怎麼樣? – Amir 2013-04-05 13:38:08

+0

我正在向JS警報迴應變量,而且看起來沒有任何空格。但是通過trim()運行它,現在MySQL正在接受它作爲表名。不幸的是,現在它說我的桌子不存在。 – user1537360 2013-04-05 14:01:16

回答

0

嘗試使用$sql_table'$sql_table',如果你相信,這包含右表名。 像你正在使用其他列的值 檢查是否可以幫助!

+0

使用'$ sql_table'會給我一個語法錯誤。不管怎麼說,還是要謝謝你。 – user1537360 2013-04-05 14:09:25

0

在執行之前轉儲/記錄您的查詢 - 之後問題應該很明顯(我懷疑表名中有一些額外的字符)。

幾件事情:

  • 你應該永遠不會信任你的用戶,並接受一切,他們會在送你$ _ POST,使用白名單中的字段您想更新,而不是
  • 你的代碼容易受到SQL注入的影響,我推薦至少使用一些框架/ standalone libraryPDO,避免將來不推薦使用mysql_query。檢查這個獲得一些解釋http://www.phptherightway.com/#databases
+0

感謝您提供有關安全的信息,我一定會檢查一下。 你的意思是我應該在運行mysql_query()之前記錄$ query變量嗎? – user1537360 2013-04-05 14:11:46

+0

是的,這應該會幫助你在將來調試這樣的問題,一些很酷的調試器(而不是簡單的[var_dump](http://php.net/manual/en/function.var-dump.php))會使它更容易 - 我推薦[Tracy](https://github.com/nette/tracy)來自[Nette](http://nette.org/)framework http://doc.nette.org/en/調試 – martinkacmar 2013-04-05 14:18:28

0

表名在MySQL中區分大小寫。請檢查是否有錯誤。

0

你必須在這個``qoutes中包圍查詢中的mysql表的名字。當你創建mysql表時,在創建之前修改(mysql名稱表的$ variable)非常重要,因爲如果「mysql名稱表的$變量」在edns中有空格或者在啓動mysql中沒有創建表。最後,當您在查詢中調用mysql名稱表的$ variable變量時,您必須再次修剪(mysql名稱表的$ variable)。