【发布时间】:2014-04-06 11:46:32
【问题描述】:
我有一个附属于 php 处理程序的 ajax 调用,其中有一个准备好的语句。
而且它不起作用。没有发现错误。
当我将它从已弃用的 mysql_real_escape 更改为 pdo 准备好的 statememt 时,它就停止了工作。
这是我的代码:
$create_pdo=new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
$statement=$create_pdo->prepare("INSERT INTO REGISTRY (fname, lname, email, password, age, sex, city, timereg, frcode) VALUES (:fname_received, :lname_received, :email_received, :password_received, :dob_received, :sex_received, :city_received, :timepassreg, :frcode)");
$statement->bindParam(':fname_received', $fname_received);
$statement->bindParam(':lname_received', $lname_received);
$statement->bindParam(':email_received', $email_received);
$statement->bindParam(':password_received', $password_received);
$statement->bindParam(':dob_received', $dob_received);
$statement->bindParam(':sex_received', $sex_received);
$statement->bindParam(':city_received', $city_received);
$statement->bindParam(':timepassreg', $timepassreg);
$statement->bindParam(':frcode', $frcode);
$statement_executed=$statement->execute();
if ($statement_executed){
$messagetosend="<font size=\"2\" color=\"#347C17\" face=\"Tahoma\"> <strong>Приветствуем нового пользователя проекта 'Фаворит'!</strong></font>,<br><font size=\"2\" color=\"#1F2320\" face=\"Tahoma\">Для того, чтобы начать пользоваться нашим сайтом, вам нужно будет ввести авторизационный код.<br>Ваш авторизационный код: <font size=\"2\" color=\"#336699\" face=\"Tahoma\"><strong>".$frcode."</strong></font><br>Этот процесс проводится в целях борьбы со спамом и его предотвращения.<br>С уважением,<br>Проект 'Фаворит'.</font>";
$mailheader='MIME-Version: 1.0' . "\r\n" . 'Content-type: text/html; charset=UTF-8' . "\r\n";
$mailheader.="X-Mailer: PHP \r\n";
$mailheader.="From: Фаворит <passwordreminder@favorit.kz>";
mail($email_received,"Авторизация на проекте 'Фаворит'",$messagetosend,$mailheader);
$array_to_json=array("database_input" => "true","mail_sent" => "true");
echo json_encode($array_to_json);
}
我该如何解决这个问题?
【问题讨论】:
-
参见Errors and error handling:默认情况下,PDO 会静默处理错误(因此,如果
$statement_executed为假,则必须检查$statement->errorInfo()以找出原因);这可以根据个人喜好进行更改,以便 PDO 引发警告或异常。 -
我引入了一个新变量 $statement_error=$statement_executed->errorInfo();结果,我在第 41 行的 /home/letsrate/public_html/favorit/ajax/ajax_user_signup.php 中收到 Parse error: syntax error, unexpected '$statement_error' (T_VARIABLE) 。所以新变量导致了新错误。旧的错误仍然不确定。
-
应该是
$statement->errorInfo(),而不是$statement_executed->errorInfo()。 -
我收到了这个错误。致命错误:在第 40 行的 /home/letsrate/public_html/favorit/ajax/ajax_user_signup.php 中的非对象上调用成员函数 errorInfo()
-
如果
$statement是一个非对象,那么对$create_pdo->prepare()的调用一定是失败的(但是你应该收到bindParam()和execute()调用的类似错误?)。您可以检查$create_pdo->errorInfo()找出原因。