PHP PDO_SQLSRV bindparam()无法运行

时间:2016-02-10 23:56:49

标签: php mysql sql-server pdo sqlsrv

我在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吗?到目前为止,我还没有在网上发现任何类似的问题。

感谢。

1 个答案:

答案 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服务器