这是我的
PHP sql语句,它在var dumpping时返回false
$password_md5 = md5($_GET['password']); $sql = $dbh->prepare('INSERT INTO users(full_name,e_mail,username,password,password_plain) VALUES (:fullname,:email,:username,:password,:password_plain)'); $result = $sql->execute(array( ':fullname' => $_GET['fullname'],':email' => $_GET['email'],':username' => $_GET['username'],':password' => $password_md5,':password_plain' => $_GET['password']));
如果PDO语句返回FALSE,则表示查询失败.您必须将PDO设置为正确的错误报告模式以了解错误.
原文链接:https://www.f2er.com/php/131434.html$dbh->setAttribute( PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION );
收到错误消息后,您必须阅读并理解它.这听起来太明显了,但是学习者经常忽略错误信息的极端帮助.然而大多数时候它很简单地解释了这个问题.说,如果它表示特定的表不存在,你必须检查拼写,打字错误,字母大小写,凭据等.或者,如果它说sql语法有错误,那么你必须检查你的sql.问题点在错误消息中引用的查询部分之前.
您还必须信任该错误消息.如果它表示令牌的数量与绑定变量的数量不匹配,那就是这样.缺席的表或列也是如此.给予选择,无论是自己的错误还是错误信息都是错误的,始终坚持前者.再次,这听起来很高兴,但是在这个网站上的数百个问题证明了这个建议非常有用.
请注意,为了看到PDO错误,您必须能够看到PHP错误.要做到这一点,你必须配置PHP取决于站点环境:
>在开发服务器上,在屏幕上出现错误是非常方便的,因为显示错误必须打开:
error_reporting(E_ALL); ini_set('display_errors',1);
>而在现场网站上,所有错误都必须记录下来,但不会向客户显示.为此,以这种方式配置PHP:
error_reporting(E_ALL); ini_set('display_errors',0); ini_set('log_errors',1);
请注意,error_reporting应该始终设置为E_ALL.
还要注意的是,尽管常见的错误,no try-catch have to be used for the error reporting. PHP将会报告您的PDO错误已经,并以更好的形式.一个未被捕获的异常非常适合开发,但是如果要显示一个自定义的错误页面,仍然不要使用try catch来实现,而只是在set custom error handler.简而言之,您不必将PDO错误视为特殊的但将它们视为您的代码中的任何其他错误.