2013-11-18 3 views
2

Я не могу получить записи из хранимой процедуры. Если я запускаю с SQL Server, я получаю записи. Если я назову его из .NET, у меня появятся записи ... но если я его вызову из PHP, я не получу записи.Я не могу получить записи из хранимой процедуры

Я использую PHP 5.3.3 на CentOS 6. Я использую mssql. Все остальные SP в порядке.

Я попытался

$provider = 1010; 
$array = array(); 
$stmt2 = mssql_init("[dbo].[PORA_sp_GET_LetterGenerationRecords]"); 
mssql_bind($stmt2, "@ProviderID", $provider, SQLINT4); 
$letters = mssql_execute($stmt2); 
while($row = mssql_fetch_assoc($letters)){ 
    $array[] = $row; 
} 
mssql_free_statement($stmt2); 
echo '<pre>'; print_r($array); echo '</pre>'; 

и я

Array 
(
) 

Я попытался слишком

$array = array(); 
$letters = mssql_query('EXEC [dbo].[PORA_sp_GET_LetterGenerationRecords] @ProviderID = 1010'); 
while($row = mssql_fetch_assoc($letters)){ 
    $array[] = $row; 
} 
echo '<pre>'; print_r($array); echo '</pre>'; 

и я получил

Array 
(
) 

Я включил

echo 'MSSQL error: '. mssql_get_last_message(); 

и ответ:

MSSQL error: 

я очень любопытный. Прямо сейчас я запускаю SP шаг за шагом из PHP. Это позорно.

Я пробовал:

$provider = 1010; 
    $array = array(); 
// $letters = mssql_query('EXEC [dbo].[PORA_sp_GET_LetterGenerationRecords] @ProviderID = 1010'); 
    $stmt2 = mssql_init("[dbo].[PORA_sp_GET_LetterGenerationRecords]"); 
    mssql_bind($stmt2, "@ProviderID", $provider, SQLINT4); 
    $letters = mssql_execute($stmt2); 
    if($letters){ 
     echo mssql_num_rows($letters); 
     while($row = mssql_fetch_assoc($letters)){ 
      $array[] = $row; 
     } 
     mssql_free_statement($stmt2); 
     echo '<pre>'; print_r($array); echo '</pre>'; 
    } 
    else{ 
     echo 'MSSQL error: '. mssql_get_last_message(); 

     echo error_get_last(); 
    } 

и тот же ответ.

+0

Итак, если вы выполняете 'SELECT * FROM any' в PHP с использованием того же кода, он возвращает набор результатов? – OGHaza

+0

Когда я запускаю все в PHP, запустите нормально. Этот SP сложный, поскольку он берет данные из некоторых таблиц и создает временную таблицу с данными. – norgematos

+0

И просто для уточнения, если вы выполняете 'EXEC [dbo]. [PORA_sp_GET_LetterGenerationRecords] @ProviderID = 1010' в студии управления или что-то еще, она работает нормально? (вместо выполнения кода в процедуре) – OGHaza

ответ

2

Ваш код выглядит нормально, но по какой-либо причине инструкция sql завершается.

Так что вам нужно для отладки это, я хотел бы предложить первую попытку, чтобы заставить его работать с параметром жестко закодированного:

try { 
    $array = array(); 
    $result = mssql_query('EXEC [dbo].[PORA_sp_GET_LetterGenerationRecords] @ProviderID = 1010'); 
    while ($row = mssql_fetch_assoc($result)) 
    { 
     $array[] = $row; 
    } 
    var_dump($array); 
} catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
    error_log($e->getMessage());// or log it to a txt file 
    echo 'MSSQL error: '. mssql_get_last_message(); 
    echo 'Last error: '.error_get_last(); 

} 


Вы должны также запустить SQL Profiler и фильтр за исключением иметь лучшая идея.

+0

Я сделал это. Ответ: array (0) {} – norgematos

+0

thats what 'var_dump ($ array);' показывает вам? – meda

+0

Да, сейчас я проверю профилировщик. – norgematos

0
<?php 
    $query = "EXEC [dbo].[PORA_sp_GET_LetterGenerationRecords] @ProviderID = 1010"; 
    $result = mssql_query($query); 
    if (!$result) { 
     die('Invalid query: ' . mssql_error()); 
    } 

    while ($row = @mssql_fetch_assoc($result)) { 
     echo $row['col1'] 
    } 
?> 
+0

Я сделал $ query = "EXEC [dbo]. [PORA_sp_GET_LetterGenerationRecords] @ProviderID = 1010"; $ result = mssql_query ($ query); if (! $ Result) { die ('Неверный запрос:'. Mssql_error()); } echo mssql_num_rows ($ result); while ($ row = @mssql_fetch_assoc ($ result)) { echo $ row ['ID']; } и результат: 0 – norgematos

Смежные вопросы