我在Windows上使用PHP 5.6.16,之前使用MySQL进行所有PDO查询。我在这里做的唯一改变是使用Microsoft SQL Server 2008而不是MySQL作为数据库。因此我现在已经安装了正确的SQLSRV驱动程序,phpinfo()看到它并且很高兴,并且生活一直没有数据库连接错误。
在尝试使用读取查询加载某些页面后,我看到没有数据通过。我发现在$queryResult = $query->execute();
命令后,此$queryResult
变量返回FALSE
。
所以我向前走了一步,发现我$query
中的实际查询仍然有我准备好的变量而不是绑定数据。这是我绑定变量并执行的地方:
$query->bindParam(':startDate', $startDate);
$query->bindParam(':endDate', $endDate);
$queryResult = $query->execute();
以下是$query
之后的VarDump:
object(PDOStatement)#16 (1) { ["queryString"]=> string(86) "SELECT * WHERE UNIX_TIMESTAMP(DATE) >= :startDate AND UNIX_TIMESTAMP(DATE) <= :endDate"}
我的理解是,在这里,我应该看到真实的数据,完整的查询,而不是准备好的变量。在安装或初始化期间我没有使用MS SQL SRV吗?到目前为止,我还没有在网上发现任何类似的问题。
感谢。
答案 0 :(得分:0)
当你转移到SQL Server时,事情不会改变,你仍然需要检查你之前应该做的错误。从准备或执行返回错误通常意味着查询由于某种原因失败,或者连接未正确建立
对所有对数据库访问层的调用添加一些错误检查。
我假设您没有在此处的连接上设置例外
// add check for good result from prepare
if ( $query === FALSE ) {
print_r($conn->errorInfo());
exit;
}
$query->bindParam(':startDate', $startDate);
$query->bindParam(':endDate', $endDate);
$queryResult = $query->execute();
if ( $queryResult === FALSE ) {
print_r($query->errorInfo());
exit;
}
这段代码应该告诉你什么是错的,你可以自己解决
哦,您还应该检查连接是否正常工作并在出现错误时显示错误
另一个有用的调试工具是在调试时在脚本中的第一个<?php
标记之后添加这些行。您不希望将此信息发送给真正的用户
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
特别是如果您正在使用最有可能关闭错误报告的LIVE服务器