首页 > 解决方案 > 我无法使用 PDO 在 SQL Server 2008 中执行存储过程

问题描述

我无法使用 PDO 和 freetds (tds version=4.2, FreeBSD 10.0, php 5.6.2) 在 SQL Server 2008 中执行存储过程:

$host = 'SRV1';
$db = 'FLOT_RRR';
$user = 'coolman';
$pass = '******';
$charset = 'windows-1251';
$dsn = "dblib:version=4.2;host=$host;dbname=$db;$charset";
try {
    $pdo = new PDO($dsn, $user, $pass);   
} catch(PDOException $e) {
        die("Failed to get DB handle: " . $e->getMessage()) ;
}

$st = $pdo->prepare('EXEC dbo.getNumberSmallShips');
$res = $st->execute();

var_dump($res)返回布尔值(假)

我的存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[getNumberSmallShips] 
AS
BEGIN
    SET NOCOUNT ON;

    SELECT COUNT (*) 
    FROM
        (SELECT 
             FLO_RN, FLO_FKL 
         FROM 
             flotmintrans 
         WHERE 
             FLO_FKL LIKE '%мс%' OR
             FLO_FKL LIKE '%категория%' OR
             FLO_FKL LIKE '%категория 3%' OR
             FLO_FKL LIKE '%категория 4%' OR
             FLO_FKL LIKE '%категория 5%' OR      
             FLO_FKL LIKE '1' OR
             FLO_FKL LIKE '2' OR
             FLO_FKL LIKE '3' OR
             FLO_FKL LIKE '5' OR
             FLO_FKL LIKE '4' AND 
             FLO_DSU IS NULL) AS subquery
END

怎么了?

标签: phpsql-server-2008stored-procedurespdo

解决方案


连接 DB 的用户 coolman 必须具有执行存储过程 getNumberSmallShips 的权限。而已。


推荐阅读