2014-11-08 85 views
1

不知道爲什麼這不起作用。我按照完全相同的過程(即準備,綁定,執行)在同一個數據庫上執行SELECT。但由於某種原因的更新不會在數據庫中更新。PHP MYSQLI編寫的update語句不起作用?

下面是代碼:

$stmtUpdate = $mysqli->prepare("UPDATE license_keys.$injection_key_text_type 
SET given_date = CURRENT_DATE(), contact_email = ?, given_bool = ?, contact_id = ?  
WHERE key_text_id = ?;"; 
$stmtUpdate->bind_param("siss",$recipient_email,1,$contact_id,$key_text_id); 
$stmtUpdate->execute(); 
$stmtUpdate->close(); 

事情我已經試過

  • 纏繞第一行中的if語句
  • 交換given_date = CURRENT_DATEgiven_date = ?則剛添加的任意字符串到我的綁定參數即($stmtUpdate->bind_param("ssiss","11-8-2014",$recipient_email,1,$contact_id,$key_text_id);
  • 在聲明結尾處嘗試使用和不使用「;」,因爲它使用w使用程序版本而不是OO方式。

另請注意,如果我作爲程序運行它工作得很好,但我需要它使用預處理語句。 下面是程序代碼:

$mysqli->query("UPDATE license_keys.$injection_key_text_type 
SET given_date = CURRENT_DATE(), contact_email = '$recipient_email', given_bool = 1, contact_id = '$contact_id' 
WHERE key_text_id = '$key_text_id';"); 

回答

2

在我看來,根據您需要幾個這些佔位符是整數,而不是一個字符串,如果它們實際上INT變量名。

$stmtUpdate->bind_param("siii",$recipient_email,1,$contact_id,$key_text_id); 

爲了調試的目的,我會建議你這樣做。 $mysqli將是你的數據庫連接。希望它能讓你知道什麼是錯的。

if (!($stmtUpdate = $mysqli->prepare("UPDATE license_keys.$injection_key_text_type 
SET given_date = CURRENT_DATE(), contact_email = ?, given_bool = ?, contact_id = ?  
WHERE key_text_id = ?")) { 
    echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error; 
    exit; 
} 

if (!$stmtUpdate->bind_param("sisi",$recipient_email,1,$contact_id,$key_text_id)) { 
    echo "Binding parameters failed: (" . $stmtUpdate->errno . ") " . $stmtUpdate->error; 
    exit; 
} 

if (!$stmtUpdate->execute();) { 
    echo "Execute failed: (" . $stmtUpdate->errno . ") " . $stmtUpdate->error; 
    exit; 
} 
+0

非常好的建議,我什至沒有想到這一點。所以這給了我一個更好的想法,因爲$ key_text_id是一個int,所以我做了這個改變,但奇怪的是$ contact_id被存儲爲一個varchar?我想現在可能與'given_date = CURRENT_DATE()'函數有關。因爲我的測試頁甚至沒有吐出原本放在腳本頂部的html。 非常感謝您的建議 – 2014-11-08 18:17:04

+0

'given_date'列類型爲'DATE','DATETIME'或'TIMESTAMP'? – EternalHour 2014-11-08 18:22:49

+0

'given_date'在數據庫中輸入'date' – 2014-11-08 18:28:37