为什么这条PDO语句会默默失败? [英] Why does this PDO statement silently fail?

查看:0
本文介绍了为什么这条PDO语句会默默失败?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的PHP SQL语句,在var转储时返回FALSE

$sql = $dbh->prepare('INSERT INTO users(full_name, e_mail, username, password) VALUES (:fullname, :email, :username, :password)');
$result = $sql->execute(array(
                    ':fullname' => $_GET['fullname'], 
                    ':email' => $_GET['email'], 
                    ':username' => $_GET['username'],
                    ':password' => $password_hash));

PDO

有时您的推荐答案代码会产生类似Call to a member function execute()或类似的错误。或者甚至没有任何错误,但查询并不都能正常工作。这意味着您的查询未能执行。

每次查询失败时,MySQL都会显示一条错误消息,解释原因。不幸的是,在默认情况下,这样的错误不会传输到PHP,您得到的只是上面提到的沉默或隐晦的错误消息。因此,配置PHP和PDO以报告MySQL错误是非常重要的。一旦您收到错误消息,修复问题将是轻而易举的事。

为了获取有关该问题的详细信息,请在连接后的代码中立即放置以下行

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

(其中$dbh是您的PDO实例变量的名称),或者--最好是--将该参数添加为connection option。在此之后,所有数据库错误将被转换为PDO异常,如果不进行处理,这些异常将与常规的PHP错误一样。

收到错误消息后,您必须阅读并理解它。这听起来太明显了,但学习者经常忽略错误消息的含义。然而,在大多数情况下,它很直接地解释了问题:

  • 比方说,如果它说某个表不存在,你必须检查拼写、打字错误、字母大小写。此外,您还必须确保您的PHP脚本连接到正确的数据库
  • 或者,如果它显示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

还请注意,尽管存在常见的错觉,不必使用try-Catch来进行错误报告。PHP将以一种更好的形式报告您的PDO错误。未捕获的异常非常有利于开发,但是如果您想要显示定制的错误页面,仍然不要为此使用TRY CATCH,而只需设置custom error handler。简而言之,您不必将PDO错误视为特殊错误,而是将其视为代码中的任何其他错误。

P.S.
有时没有错误,但也没有结果。则表示没有与您的条件匹配的数据。因此,你必须承认这一事实,即使你可以发誓数据和标准都是正确的。他们不是。你得再检查一遍。我有一个简短的答案,可以帮助您找出匹配的问题,Having issue with matching rows in the database using PDO。只需按照此说明和链接的教程一步一步地操作,您的问题就可以得到解决,或者堆栈溢出有一个可回答的问题。

这篇关于为什么这条PDO语句会默默失败?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆