2012-07-29 46 views
0

我有這個疑問:MySQL的INSERT INTO不會做任何事情 - 甚至沒有錯誤

mysql_query("INSERT INTO `63_Activity` (`username`, `time`) VALUES (`$usernann2`, `$date`)"); 

但是,它不會做任何事情。即使當我試圖糾正變數

". $variable ." 

我檢查了變量。

我複製的代碼的小線從某處它的工作原理。

數據庫和表存在。

我只是覺得我控制住的事情,那麼發生了-.-

預先感謝您。

PS:我嘗試添加或死亡() - 但沒有錯誤。沒有。

+1

請您查詢後調用mysql_error。希望輸出顯示問題的原因。更多信息http://php.net/manual/en/function.mysql-error.php – mrok 2012-07-29 20:59:28

+0

你使用周圍文本值反引號,我敢肯定你會想單引號那裏。 – fvu 2012-07-29 21:00:11

+0

另外,在PHP mysql_ *功能** **棄用,這意味着它們會消失一些日子在不久的將來。 php團隊不鼓勵他們在新代碼中的使用。切換到PDO並準備好語句,因爲您正在做的事情使您容易受到SQL注入攻擊。 – fvu 2012-07-29 21:02:35

回答

0

你會過得更好使用Paramaterized查詢,在後續例如:

<?php 

try { 
    $usernann2 = "whateverUsernameFits"; 
    $date = new DateTime('2000-01-01'); 
    $stmt = $this->db->prepare ("INSERT INTO 63_Activity (username, time) VALUES (:usernann2, :date)"); 
    $stmt->bindParam (':usernann2', $usernann2); 
    $stmt->bindParam (':date', $date);   
    $stmt->execute(); 
}catch (PDOException $e) 
     { 
      throw new Exception ($this->db->errorInfo() . 'Problem inserting object '); 
     } catch (Exception $e) { 
      throw new \Exception ('Problem inserting object '); 
     } 

     ?> 

綁定參數是防止SQL注入攻擊的主要手段。拋出的異常會給你一個線索,看看你的查詢中是否有問題。我通常首先檢查查詢以確保它與真實值一起工作。從那裏它是一個消除的過程。

PS。有關SQL注入的更多信息,請參閱https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet。您還應該能夠在Stackoverflow上找到關於SQL注入的一些優秀信息和問題。

1

的值必須是用單引號('),而不是反引號(')

mysql_query("INSERT INTO `63_Activity` (`username`, `time`) VALUES ('$usernann2', '$date')"); 

你也應該確保你消毒的投入,以及最好不到位使用mysql_功能的mysqli_

+0

所以我應該最好使用mysqli_來代替?它會給出完全相同的輸出嗎? :) – Christian 2012-07-29 21:09:22

+0

它更安全 – 2012-07-29 23:49:25

0

嘗試把查詢放在一個變量和回聲它,並查看是否有錯誤,試圖在PHP中運行它我的管理也

+0

我已經做到了。他們完美地工作。我也試過非變量。 – Christian 2012-07-29 21:07:37

+0

你可以發佈它的回聲以及字段'時間'的類型嗎? – 2012-07-29 22:03:52

+0

沒有字段。它應該輸入變量$ date,它回顯「time()」 沒問題。:) – Christian 2012-07-29 23:00:58