2016-09-23 16 views
5

SqlServerストアドプロシージャから戻り値を取得しようとしています。しかし、FreeTDSを使用している私のUbuntu Serverで構文エラーが発生しています。私のWindowsマシンでSQL Serverストアドプロシージャを呼び出して、ルーメンからPHP PDOを使用して戻り値を取得すると、構文エラーが発生する

$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

はい、私はこれらの2つがまったく同じかどうかはわかりません。私にとっては例外がスローされ、適切な場所で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

関連する問題