2016-09-23 9 views
5

Próbuję uzyskać wartość zwracaną z procedury składowanej SqlServer. Ale to daje błąd składni w moim Ubuntu Server, który używa FreeTDS.Wywołanie procedury składowanej SQL Server przy użyciu PHP PDO z Lumen dla zwracanej wartości daje błąd składni

SQLSTATE[HY000]: General error: 20018 Incorrect syntax near '0'. [20018] (severity 15) [(null)]

Poniżej jest mój kod:

$stateId = 1; 
$testData = 0; 
$retVal = 0; 

$pdo = DB::connection(env('DBCONNECTION'))->getPdo(); 
$stmt = $pdo->prepare('EXEC ? = GetMyCities_sp @StateID = ?, @TestData = ?'); 
$stmt->bindParam(1, $retVal, \PDO::PARAM_INT,20); 
$stmt->bindParam(2, $stateId, \PDO::PARAM_INT); 
$stmt->bindParam(3, $testData, \PDO::PARAM_INT | \PDO::PARAM_INPUT_OUTPUT, 20); 

$result_status = $stmt->execute(); 

$resultSet = $stmt->fetchAll(\PDO::FETCH_OBJ); 
print_r($resultSet); 
echo "<br />"; 
$stmt->nextRowset(); 

echo "Return value is ".$retVal; 

Te same działa dobrze w moim komputerze Windows. Masz pojęcie, co jest nie tak w kodzie?

+0

Widzieliście to? https://bugs.php.net/bug.php?id=58514 –

+0

Tak, ale nie jestem pewien, czy te dwa są dokładnie takie same. Dla mnie wyjątek jest rzucany, param jest we właściwym miejscu, ale pokazujący błąd składni podczas wykonywania go. – Beniston

+0

symbole zastępcze mogą reprezentować tylko VALUES, a nie słowa kluczowe/identyfikatory. –

Odpowiedz

0

IIRC, parametry związane muszą być parametrami, a nie nazwami procedur. Czy możesz dać ten test, zastępując pierwszy ? nazwą procedury składowanej?

$stmt = $pdo->prepare('EXEC your-proc-name = GetMyCities_sp @StateID = ?, @TestData = ?'); 
$stmt->bindParam(1, $stateId, \PDO::PARAM_INT); 
$stmt->bindParam(2, $testData, \PDO::PARAM_INT | \PDO::PARAM_INPUT_OUTPUT, 20); 

To było dawno grałem z PHP, ale może być w stanie to zrobić, jeśli pierwsza próba działa:

$stmt = $pdo->prepare('EXEC $retVal = GetMyCities_sp @StateID = ?, @TestData = ?'); 
+0

Nie, to nie zadziałało. Ponownie daje podobny błąd składni. – Beniston

Powiązane problemy