这是我的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']));
1条答案
按热度按时间fnatzsnv1#
有时您的pdo代码会产生如下错误
Call to a member function execute()
或类似的。或者,即使没有任何错误,但查询也无法正常工作。这意味着您的查询无法执行。每次查询失败时,mysql都会显示一条解释原因的错误消息。不幸的是,默认情况下,这些错误不会传输到php,您所拥有的只是一个静默或上面提到的一条神秘的错误消息。因此,配置php和pdo来报告mysql错误是非常重要的。一旦您收到错误消息,就可以毫不费力地解决问题。
为了获得有关问题的详细信息,请在连接后立即在代码中输入以下行
(在哪里
$dbh
是pdo示例变量的名称)或-更好-将此参数添加为连接选项。在此之后,所有数据库错误都将转换为pdo异常,如果不考虑这些异常,它们将与常规php错误一样起作用。在发生特定错误的情况下,很少有可能不会引发异常。如果你的
query()
/prepare()
或execute()
呼叫返回false
但也不例外,请检查PDO::errorInfo()
这样地,收到错误消息后,您必须阅读并理解它。这听起来太明显了,但学习者往往忽略了错误信息的含义。然而,大多数情况下,它很直截了当地解释了这个问题:
比如说,如果它说某个特定的表不存在,你必须检查拼写、打字、字母大小写。您还必须确保您的php脚本连接到正确的数据库
或者,如果它说sql语法中有错误,那么您必须检查sql。问题点就在错误消息中引用的查询部分之前。
您还必须信任错误消息。如果它说令牌的数量与绑定变量的数量不匹配,那么就是这样。缺少的表或列也是如此。如果有选择,无论是你自己的错误还是错误信息是错误的,始终坚持前者。同样,这听起来是居高临下,但这个网站上的数百个问题证明了这个建议非常有用。
请注意,为了查看pdo错误,您必须能够查看php错误。为此,必须根据站点环境配置php:
在开发服务器上,在屏幕上显示错误非常方便,因此必须打开显示错误:
在实时站点上,必须记录所有错误,但绝不向客户端显示。为此,请通过以下方式配置php:
注意
error_reporting
应设置为E_ALL
总是还要注意的是,尽管存在常见的错觉,但错误报告不必使用try-catch。php将以更好的形式向您报告pdo错误。一个未捕获的异常对于开发来说是非常好的,但是如果您想显示一个定制的错误页面,仍然不需要使用try-catch,只需要设置一个定制的错误处理程序。简而言之,您不必将pdo错误视为特殊的错误,而是将它们视为代码中的任何其他错误。
附笔
有时没有错误,但也没有结果。这就意味着,没有数据符合您的标准。所以你必须承认这个事实,即使你可以发誓数据和标准都是正确的。事实并非如此。你必须再检查一遍。我有一个简短的答案,可以帮助您找出匹配问题,即使用pdo在数据库中匹配行时遇到的问题。只需按照此说明和链接的教程一步一步地进行操作,就可以解决您的问题,或者对堆栈溢出有一个可回答的问题。