2016-09-23 5 views
5

SqlServer 저장 프로 시저에서 반환 값을 가져 오려고합니다. 하지만 FreeTDS를 사용하는 우분투 서버에 구문 오류가 있습니다. 내 윈도우 머신에서반환 값으로 Lumen에서 PHP PDO를 사용하여 SQL Server 저장 프로 시저를 호출하면 구문 오류가 발생합니다.

$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; 

같은 작품 잘 :

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

다음은 내 코드입니다. 코드에서 무엇이 잘못 되었습니까?

+0

당신이 봤어? https://bugs.php.net/bug.php?id=58514 –

+0

네,하지만이 둘이 정확히 같은지 확실하지 않습니다. 예외가 발생했습니다. param은 올바른 위치에서 가져 왔지만 실행하는 동안 구문 오류가 표시됩니다. – Beniston

+0

자리 표시자는 키워드/식별자가 아닌 VALUES 만 나타낼 수 있습니다. –

답변

0

IIRC의 경우 바인딩 된 매개 변수는 프로 시저 이름이 아니라 매개 변수 여야합니다. 첫 번째 ?을 저장 프로 시저 이름으로 바꾸고 테스트 할 수 있습니까?

$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); 

내가 PHP와 함께 연주 한 이후 오랜 시간이되었습니다 만, 첫 번째 테스트가 작동하는 경우이 작업을 수행 할 수 있습니다

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

아니요, 작동하지 않았습니다. 다시 비슷한 구문 오류가 발생합니다. – Beniston