2012-07-19 35 views
0

這段代碼沒有錯誤?因爲我沒有得到我的數據庫更新,我沒有得到任何錯誤。謝謝。mysqli-> prepare('Update')

//connect to db 

$email = $mysqli->real_escape_string($_POST['email']); 
$bo = $mysqli->real_escape_string($_POST['bo']); 
$p1 = $mysqli->real_escape_string($_POST['p1']); 
$p2 = $mysqli->real_escape_string($_POST['p2']); 
$dt = $mysqli->real_escape_string($_POST['dt']); 

$dt = new DateTime("2012-07-01 13:13:13", new DateTimeZone('Europe/Paris')); 

//more validation code... 

$stmt = $mysqli->prepare('UPDATE table SET Password=?, R_P=?, R_T=? WHERE E_mail=?') 
$stmt->bind_param("ssss", $p2, $p2, $dt, $email); 
$stmt->execute(); 
$stmt->close(); 

$mysqli->close(); 

//send email 

我沒有錯誤,因爲我忘了我的網頁上添加一個事情,我總是在我的所有網頁添加:

// check for errors 
require_once('check_all_errors.php'); 
+1

如果你沒有得到任何錯誤,並且你覺得不確定,你可以做一些事情來改善你的情況:1.)爲了調試/開發的目的,使錯誤報告達到最高水平。 2.)檢查函數返回值的錯誤條件並報告這些錯誤。 – hakre 2012-07-19 09:44:26

+0

[mysqli_real_escape_string問題](http://stackoverflow.com/q/5385822/)可能的重複,[使用預準備語句時必需mysql_real_escape_string()?](http://stackoverflow.com/q/6232084/) – outis 2012-07-19 09:54:26

+0

@ Robinv.G。我問一些有時候由於某些原因而沒有回答的問題......或者是因爲他們是「愚蠢」的問題或者什麼。那麼我怎樣才能接受他們的答案呢?我正在審查我的問題,以防我忘記接受任何問題。 – Pavlos1316 2012-07-19 09:55:02

回答

1

你兩次,一個手動一次由編碼數據將它們提供給準備好的聲明。只需編碼一次,如:

$stmt = $mysqli->prepare('UPDATE table SET Password=?'); 
$stmt->bind_param('s', $_POST['password']); 

順便說一句,除非你真正想要寫MySQL特定的代碼,沒有理由使用的mysqli了。 PDO模塊支持多種數據庫,具有類似的界面。

+0

我將清除我的代碼並對數據進行一次編碼。謝謝。 – Pavlos1316 2012-07-19 11:06:27

+0

我的驗證後,我發送一封電子郵件與用戶信息,我正在使用$密碼。現在我將用什麼來發送信息?不接受$ _POST [密碼]。 – Pavlos1316 2012-07-19 11:20:49

+0

如果您要發送電子郵件,則必須以與將其包含在SQL查詢中時不同的方式對值進行編碼。在純文本電子郵件中,您可以包含它。在HTML電子郵件中,使用['htmlspecialchars'](http://php.net/htmlspecialchars)。 – phihag 2012-07-19 11:26:22