繁体   English   中英

查询不返回结果

[英]Query does not return a result

我将基于 Web 的应用程序从 MySQLi 转换为 PDO,因为我也想使用 Microsoft SQL-Server 作为数据库。 PDO 与 MySQL 数据库一起工作就像一个魅力。 现在我第一次用 MS-SQL 尝试了它,但它没有。 几乎每个查询都必须更新。 这是非常令人沮丧的。

下面的简单代码让我抓狂:

$ComputerGUID = "5BEC3779-B002-46BA-97C4-19158C13001F";

$SqlSelectQuery = "SELECT computermapping.PrinterGUID, 
                case when computerdefaultprinter.PrinterGUID IS NOT NULL then 1 else 0 end AS isDefaultPrinter
                FROM computermapping 
                LEFT JOIN computerdefaultprinter ON computerdefaultprinter.ComputerGUID = computermapping.ComputerGUID 
                AND computerdefaultprinter.PrinterGUID = computermapping.PrinterGUID
                WHERE computermapping.ComputerGUID = :ComputerGUID";
$SqlStatement  = $pdo->prepare( $SqlSelectQuery );
$SqlStatement -> bindValue( ":ComputerGUID", $ComputerGUID, PDO::PARAM_STR );
$SqlStatement->execute();

$SelectQueryNumRows = $SqlStatement->rowCount();
IF ( $SelectQueryNumRows > 0 ) {

    $Data = $SqlStatement->fetchAll(PDO::FETCH_ASSOC);

} ELSE {
    echo "The query did not return a result ...";
}

它与 MySQL 工作正常并返回结果。

使用 Microsoft SQL-Server 它得到NO RESULT (查询没有返回结果...)

在 Microsoft SQL Server Management Studio 中运行相同的查询也可以正常工作:

Microsoft SQL Server Management Studio 中的结果

使用 SQL Server Profiler 运行代码时监控查询显示如下:

使用 Microsoft SQL Server Profiler 进行监控

正如手册中提到的

某些数据库可能会返回该语句返回的行数。 但是,不能保证所有数据库都具有此行为,并且不应依赖于可移植应用程序。

所以,你不应该使用rowCount 但是当您获取所有数据时 - 使用它:

$SqlStatement->execute();

$Data = $SqlStatement->fetchAll(PDO::FETCH_ASSOC);
// in case of no data - empty array will be returned

if ($Data) {
    // process $Data;
} else {
    echo "The query did not return a result ...";
}

另请注意,如果出现错误, $Data可能为false ,如果需要,您应该处理$Data的此值。

对于大多数驱动程序, PDOStatement::rowCount()不会返回受 SELECT 语句影响的行数。 But if you are using PHP Driver for SQL Server, as is mentioned in the documentation , if the last SQL statement executed by the associated PDOStatement was a SELECT statement, a PDO::CURSOR_FWDONLY cursor returns -1 and a PDO::CURSOR_SCROLLABLE cursor returns结果集中的行数

您需要准备这样的语句:

$SqlStatement  = $pdo->prepare(
   $SqlSelectQuery, 
   array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)
); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM