2011-05-13 27 views
1

我想根據唯一的ID($ id)刪除我的數據庫中的記錄。這段代碼有什麼問題嗎?可能是你的一個簡單的PHP專業版。MySQL從表中刪除項目不起作用

function delAccount(){ 

     mysql_query("DELETE FROM accounts WHERE id=".$id."LIMIT 1"); 

     } 

我得到一個:

Fatal error: Can't use function return value in write context in  
    /home/content/53/7311353/html/cca/accounts/include/processAct.php on line 15 

我的班級我都供電一切:

class Accounts 
     { 

    function Accounts(){ 
     if (isset($_POST['addacct'])){ 
      $this->addAccount(); 
     }elseif(isset($_POST['editacct'])){ 
      $this->editAccount(); 
     }elseif(isset($_POST['delacct'])){ 
      $this->delAccount(); 
     }else{ 
      // redirect if loaded without a POST value set 
      header("Location: ../index.php?o=illegal&t=nodata"); 
     } 
    } 
+0

顯示'$ id'來自 – 2011-05-13 12:17:21

+1

顯示完整的代碼。我們不可能知道'15號線'在哪裏,也不在那裏。 – 2011-05-13 12:27:01

+0

@Mustafa:你爲什麼要刪除錯誤信息,並且**和**將T-SQL問題重新標記爲MySQL問題? – BoltClock 2011-05-13 12:30:45

回答

2

您應該首先在「。$ id」之間加一個空格。「和限制,使:

mysql_query("DELETE FROM accounts WHERE id=".$id." LIMIT 1");

其次,$ ID不是默認此功能中可用做這一點:

function delAccount($id) { 
    mysql_query("DELETE FROM accounts WHERE id=".$id." LIMIT 1"); 
} 

,並使用delAccount($ id_parameter);在你的腳本與功能一起發送ID或者試試這個:

function delAccount() { 
    global $id; 
    mysql_query("DELETE FROM accounts WHERE id=".$id." LIMIT 1"); 
} 

然後設置$id somewhe的值之後,你可以調用這個函數重新在你的代碼中。

+0

$ id不是拉,你的工作謝謝你! – 2011-05-13 18:20:02

1

你肯定$ ID設置?

如果$ id是發送給函數作爲參數,試試這個:

function delAccount($id) { 
    mysql_query("DELETE FROM accounts WHERE id=" . $id . " LIMIT 1"); 
} 

編輯:你錯過了ID與限制之間的空格字符。

添加了一些小的改進,以查詢字符串的形式:

function delAccount($id) { 
    mysql_query("DELETE FROM `accounts` WHERE `id` = " . $id . " LIMIT 1"); 
} 

編輯:

你不來從MySQL本身的錯誤。你檢查過返回的值嗎?它可能會返回另一個錯誤,或返回的值可能是正確的,但在以後的代碼中以錯誤的方式使用。

+0

@Adrian是這樣設置的。我得到錯誤:致命錯誤:無法使用函數返回值在寫在第15行的/home/content/53/7311353/html/cca/accounts/include/processAct.php上下文 – 2011-05-13 12:19:49

+0

@Adrian這沒有奏效。 – 2011-05-13 12:21:28

+2

您是否嘗試在LIMIT之前插入空格? – 2011-05-13 12:22:18

1

關於如何調試這樣的東西的一些提示。

  • 如果您懷疑有問題,首先要做的是輸出生成的查詢。像這樣:

    $query = "DELETE FROM accounts WHERE id=".$id."LIMIT 1"; 
    echo $query; // for debugging 
    

    會告訴你,至少有一件事情是不對您的查詢:您有一個空間LIMIT前失蹤。

  • mysql_query()如果遇到錯誤,則返回false。你可以檢查,並使用mysql_error()輸出。像這樣:

    $result = mysql_query($query); 
    if(!$result) trigger_error("Database error!: ".mysql_error()); 
    
  • 如果$id來自外界,如$ _GET數組,請確保您已測試它是否是在查詢中使用,以避免SQL injection前一個整數。

+0

請檢查我更新的問題 – 2011-05-13 13:03:36

1

第一:$ id的值實際上是數據庫中的一個id嗎?其次,在「LIMIT」之前需要一個空格,即:

" LIMIT 1". 
+0

是的,它是數據庫中的值 – 2011-05-13 12:21:46

+0

首先解決Richard設置的空間問題。奇怪的沒有人注意到這一點.. – 2011-05-13 12:27:31

1

您的錯誤來自PHP編譯器。你是否正在做這樣的行15:

if (delAccount(...) = false) { ... } 

?如果是這樣,請更改爲==

+0

@LMathies請檢查我更新的問題 – 2011-05-13 12:56:37

+0

@JD奧迪:請準確顯示第15行的內容。你如何調用Accounts()函數? – LHMathies 2011-05-13 13:02:27

+0

我剛更新了這個問題。我正在向一個解析它的類提交一個隱藏的字段,說明「delacct」。 – 2011-05-13 15:05:24