Ошибка привязки библиотеки Php pdo_db

#php #sql-server #pdo

#php #sql-сервер #pdo

Вопрос:

Я могу легко выполнить на php запрос pdo_dblib следующим образом:

             $stmt = $pdo->prepare("
    SELECT *
    FROM (
        SELECT *,
        ROW_NUMBER() OVER (ORDER BY ID) AS _NO
        FROM [Reports].[dbo].[Cycle] 
    ) AS SOD
    WHERE SOD._NO BETWEEN (( :page -1)* :rows ) 1
    AND :rows * 2
    ");
            $stmt->bindValue('page', 2);
            $stmt->bindValue('rows', 2);

            $stmt->execute();
            print_r($stmt->fetchAll(PDO::FETCH_ASSOC));
  

Результат:

     Array
    (
        [0] => Array
            (
                [ID] => 4608
                [StartTime] => Apr 15 2014 06:00:00:000PM
                [EndTime] => Apr 16 2014 09:30:00:000AM
                [ComputeTime] => May 29 2014 04:33:35:743PM
                [ComputeSettlementTime] => May 29 2014 04:34:49:063PM
                [_NO] => 3
            )

        [1] => Array
            (
                [ID] => 4609
                [StartTime] => Apr 16 2014 09:30:00:000AM
                [EndTime] => Apr 16 2014 10:00:00:000AM
                [ComputeTime] => May 29 2014 04:34:05:927PM
                [ComputeSettlementTime] => May 29 2014 04:34:49:297PM
                [_NO] => 4
            )

    )
  

но если я попытаюсь установить параметр «страница» во второй раз вместо «2» в этом запросе, например, параметр «строки», который уже использовался дважды в одном и том же запросе, я получу результат:

             $stmt = $pdo->prepare("
    SELECT *
    FROM (
        SELECT *,
        ROW_NUMBER() OVER (ORDER BY ID) AS _NO
        FROM [Reports].[dbo].[Cycle] 
    ) AS SOD
    WHERE SOD._NO BETWEEN (( :page -1)* :rows ) 1
    AND :rows * :page
    ");
            $stmt->bindValue('page', 2);
            $stmt->bindValue('rows', 2);

            $stmt->execute();
            print_r($stmt->fetchAll(PDO::FETCH_ASSOC)); 
  

результат:

 PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 8117 General SQL Server error: Check messages from the SQL Server [8117] (severity 16) [(null)]'
  

и этот код ошибки я не могу найти в таблице ошибок: 8117.
Кто-нибудь знает, что происходит?

Комментарии:

1. Отсутствует : попытка $stmt->bindValue(':page', 2);

2. @JitendraYadav Это не имело бы значения.

Ответ №1:

Вы должны называть каждый заполнитель по-разному и привязывать его.

 $stmt->bindValue('page1', 2);
$stmt->bindValue('page2', 2);
...