Laravel 4 mssql存储过程,带参数作为预处理语句

时间:2013-12-18 19:12:48

标签: php sql-server pdo laravel laravel-4

我想将此工作查询格式化为预准备语句:

Route::get('procedure/{adr}/{part}/{batch?}', function($adr, $part, $batch= '') {

    return DB::connection('sqlconnection')->select("Procedure_Name '$adr', '$part', '$batch'");
});`

尝试了我能想到的一切,我得到的最接近的就是这个。

DB::connection('sqlconnection')->select('Procedure_Name ?, ?, ?', array("'$adr'", "'$part'", "'$batch'"));

这会导致和sql命令一起出错,直接在db上使用就可以了。

  

Illuminate \ Database \ QueryException   SQLSTATE [42000]:[Microsoft] [SQL Server Native Client 11.0] [SQL Server]'Procedure_Name'附近的语法不正确。 (SQL:Procedure_Name'VLM','7999800','P20131018-29')

我做错了什么?

2 个答案:

答案 0 :(得分:8)

执行它们可能会遇到一些麻烦。

以下是一些选项:

DB::select('EXEC Procedure_Name ?,?,?',array($adr,$part,$batch));

DB::statement('EXEC Procedure_Name' . DB::raw($adr) . ',' . DB::raw($part) . ',' . DB::raw($batch) );

而且,这是一种快速而肮脏的方法:

$db = DB::connection();

$stmt = $db->pdo->prepare("EXEC Procedure_Name ?,?,?");

$stmt->bindParam(1, $adr);
$stmt->bindParam(2, $part);
$stmt->bindParam(3, $batch);
$stmt->execute();

$search = array();
do {
    $search = $stmt->fetchAll(PDO::FETCH_CLASS, 'stdClass');
} while ($stmt->nextRowset());

答案 1 :(得分:0)

我有错误7405然后执行以下操作

修复错误-7405-Heterogeneous-queries-requires-ANSI_NULLS

    DB::statement('SET ANSI_NULLS ON; SET ANSI_WARNINGS ON');

    $result = DB::select('EXEC sp_storeprocedure ' . DB::raw($param1) . ',' . DB::raw($param2) . ',' . DB::raw($param3) );