这是我的PHP sql语句,它在var转储时返回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']));
Run Code Online (Sandbox Code Playgroud)
You*_*nse 45
如果PDO语句返回Call to a member function execute(),则表示查询失败.您必须将PDO设置为正确的错误报告模式以了解错误.
连接后立即将此行放入代码中
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
Run Code Online (Sandbox Code Playgroud)
收到错误消息后,您必须阅读并理解它.这听起来太明显了,但学习者经常忽略错误信息的极端有用性.但大多数时候它解释这个问题非常简单.比如,如果它说特定表不存在,则必须检查拼写,拼写错误,字母大小写,凭证等.或者,如果它说SQL语法中存在错误,那么您必须检查SQL.问题点就在错误消息中引用的查询部分之前.
您还必须信任该错误消息.如果它说令牌的数量与绑定变量的数量不匹配那么它就是这样.缺席的表或列也是如此.鉴于选择,无论是你自己的错误还是错误信息是错误的,总是坚持前者.它再次听起来居高临下,但在这个网站上的数百个问题证明这个建议非常有用.
请注意,为了查看PDO错误,您必须能够查看PHP错误.为此,您必须配置PHP取决于站点环境:
在开发服务器上,在屏幕上出现错误非常方便,因为必须打开显示错误:
trigger_error("PDO errorInfo: ".$dbh->errorInfo());
Run Code Online (Sandbox Code Playgroud)在实际站点上,必须记录所有错误,但不会向客户端显示.为此,请以这种方式配置PHP:
error_reporting(E_ALL);
ini_set('display_errors',1);
Run Code Online (Sandbox Code Playgroud)请注意,query()应始终设置prepare().
另请注意,尽管存在常见的错觉,但不必使用try-catch进行错误报告.PHP将以一种更好的形式向您报告PDO错误.未捕获的异常非常适合开发,但是如果要显示自定义错误页面,仍然不要使用try catch,而只是设置自定义错误处理程序.简而言之,您不必将PDO错误视为特殊内容,而是将其视为代码中的任何其他错误.
| 归档时间: |
|
| 查看次数: |
7740 次 |
| 最近记录: |