2012-07-19 70 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