我的PDO报表无法使用

问题描述 投票:0回答:1

这是我的PHP sql语句,当var dumping时返回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']));
php pdo
1个回答
56
投票

有时你的PDO代码会产生一个错误,比如 Call to a member function execute() 或类似。甚至是没有任何错误,但是查询都一样不成功。这说明你的查询执行失败了。

每次查询失败,MySQL都会有一个错误信息,那就是 解释原因. 不幸的是,默认情况下,这样的错误并没有传递给PHP,你所得到的只是一个沉默或上面提到的一个神秘的错误信息。 因此,配置PHP和PDO来报告MySQL错误是非常重要的。而一旦你得到了错误信息,修复问题就不费吹灰之力了。

为了得到关于问题的详细信息,可以在你的代码中,在连接之后加上以下一行

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

(其中 $dbh 是你的PDO实例变量的名称),或者--更好的是--将这个参数添加到一个叫做 连接选项. 之后,所有的数据库错误都会被转化为PDO异常,如果不处理的话,它就会像普通的PHP错误一样。

在一些特定的错误中,有很小的机会不会抛出异常。如果你的 query()prepare()execute() 调用 false 但也不例外,查看 PDO::errorInfo() 像这样。

 trigger_error("PDO errorInfo: ".$dbh->errorInfo());

在得到错误信息后,你必须阅读和理解它。这听起来太明显了,但学习者往往忽略了 意思 的错误信息。然而大多数时候它都很直接地解释了问题。

  • 比如说,如果它说一个特定的表不存在,你必须检查拼写,错别字,字母大小写。你还必须确保你的PHP脚本连接到一个正确的数据库。
  • 或者说,如果说SQL语法有错误,那你就要检查你的SQL了。而问题点就在 之前 错误信息中引用的查询部分。

您还必须 信任 的错误信息。如果它说标记的数量与绑定变量的数量不匹配,那么它就会 所以。缺席的表或列也是如此。如果有选择,不管是你自己的错误还是错误信息是错误的,始终坚持前者。同样,这听起来很高傲,但这个网站上的数百个问题证明这个建议非常有用。


注意,为了看到PDO错误,你必须能够看到一般的PHP错误。要做到这一点,你必须在网站环境中配置PHP depends。

  • 在一个 发展 服务器上显示错误是非常方便的,为此必须打开错误显示功能。

    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,而只需要设置一个 "异常"。自定义错误处理程序. 简而言之,你不需要把PDO错误当作特别的东西来处理,而是把它们当作代码中的其他错误来处理。

P.S. 有时没有错误,但也没有结果。那么这意味着。没有符合您标准的数据. 所以你必须承认这个事实,即使你可以发誓数据和标准都是正确的。他们不是。你必须再次检查它们。我有一个简短的答案,可以帮助你找出匹配的问题。使用PDO在数据库中匹配行时出现问题. 只要按照这个说明,和链接的教程一步步去做,要么你的问题就解决了,要么就能给Stack Overflow提供一个可解答的问题。

© www.soinside.com 2019 - 2024. All rights reserved.