2015-04-02 47 views
-1

所以我使用PHP和PDO將數據插入到MySQL數據庫,他們不應該。PHP和MySQL:一旦插入,所有值都爲零,但

function addLog($id, $wd, $m, $md, $t, $tz, $y, $ilp, $igp) 
{ 
    echo "|2|$wd/$m/$md/$t/$tz/$y/$ilp/$igp|"; 
    $connection = connectUserLogfiles(); 
    try 
    { 
     $sql = "INSERT INTO `log_meta` (`log_id`, `weekday`, `month`, `month_day`, `time`, `time_zone`, `year`, `inside_local_ip`, `inside_global_ip`) VALUES (log_id=:log_id, weekday=:weekday, month=:month, month_day=:month_day, time=:time, time_zone=:time_zone, year=:year, inside_local_ip=:inside_local_ip, inside_global_ip=:inside_global_ip);"; 

     $stmt = $connection->prepare($sql); 
     $stmt->bindParam(':log_id', $id, PDO::PARAM_STR); 
     $stmt->bindParam(':weekday', $wd, PDO::PARAM_STR); 
     $stmt->bindParam(':month', $m, PDO::PARAM_STR); 
     $stmt->bindParam(':month_day', $md, PDO::PARAM_STR); 
     $stmt->bindParam(':time', $t, PDO::PARAM_STR); 
     $stmt->bindParam(':time_zone', $tz, PDO::PARAM_STR); 
     $stmt->bindParam(':year', $y, PDO::PARAM_STR); 
     $stmt->bindParam(':inside_local_ip', $ilp, PDO::PARAM_STR); 
     $stmt->bindParam(':inside_global_ip', $igp, PDO::PARAM_STR); 
     $stmt->execute(); 
     $result = $stmt->rowCount(); 
     $stmt->closeCursor(); 

     return $result; 
    } catch (Exception $ex) { 
     $_SESSION['error'] = '<p>Error: something went wrong in addLog(), and we have absolutely no idea why. Sorry.</p>'; 
    } 
} 

回波語句的結果如下:

|1|Sun/Dec/31/12:12:12/Africa/Abidjan/2015/10.0.0.0/9.0.0.0| 

此外,將顯示一個消息,該消息表示一個行是在結果經由$result變量設置成功返回。 (這發生在索引中,但我向你保證,一個排在結果集中返回。)

我的問題是,數據庫表明插入的行中的每個列值具有零值。這也適用於主鍵,它不會自動遞增,因爲通過使用PHP會小心。 (缺少自動增量是由於該數據庫與應用程序綁定的結果以及該應用程序的功能所致)。

執行此查詢後,用戶將被帶到正確顯示所有關聯的視圖作爲用戶輸入數據的信息。但是,這是基於來自用戶輸入的局部變量,而不是數據庫。我覺得這樣做是安全的,因爲那時我已經確認用戶輸入是有效的,並且它被正確地插入到數據庫中。

我的主鍵,則LOG_ID,是一個INT數據類型。 所有其他數據類型都是VARCHAR。 沒有爲數據庫中的表設置默認值。 無列的列被設置爲在其各自列中需要唯一值。 NONE的列是外鍵。 所有的列被設置爲空,僅僅是因爲我的懶惰,因爲我已經在INSERT過程中的這個點之前檢查了空值。

爲什麼插件無法正常工作?我使用phpMyAdmin與數據庫

+0

以防萬一你感到困惑,在對代碼的第2行中的echo語句,「非洲/阿比讓」是$ TZ變量的內容。它們不是兩個不同的變量。 – 2015-04-02 18:34:01

+0

另外,connectUserLogfiles();運作正常。我不僅將它用於包含在同一個php腳本文件中的其他PDO語句函數,甚至還有另一個PDO語句幾乎完全像這樣將不同的數據插入到此數據庫的不同表中。 – 2015-04-02 18:36:27

+1

您在VALUES中使用UPDATE/SET語法。使用異常會拋出該語法錯誤。 – 2015-04-02 18:48:51

回答

2

操作從查詢的VALUES (...)刪除列 -

$sql = "INSERT INTO `log_meta` (`log_id`, `weekday`, `month`, `month_day`, `time`, `time_zone`, `year`, `inside_local_ip`, `inside_global_ip`) VALUES (:log_id, :weekday, :month, :month_day, :time, :time_zone, :year, :inside_local_ip, :inside_global_ip);"; 

您已經定義了它們在查詢中,由於沒有了等號和分號之間的空間 - =:你的參數不被識別爲參數。