Php Laravel 4 mssql存储过程,参数作为准备语句

Php Laravel 4 mssql存储过程,参数作为准备语句,php,sql-server,pdo,laravel,laravel-4,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('sqlconne

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

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上使用时,该命令可以正常工作

照亮\数据库\查询异常 SQLSTATE[42000]:[Microsoft][SQL Server Native Client 11.0][SQL Server]在“过程名称”附近的语法不正确。(SQL:过程名称“VLM”、“7999800”、“P20131018-29”)


我做错了什么?

执行它们时可能会遇到麻烦

以下是一些选项:

DB::select('EXEC Procedure_Name ?,?,?',array($adr,$part,$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());

如果您遇到错误7405,请执行以下操作

修复错误-7405-Heterogeneous-querys-require-ANSI_NULLS
谢谢你的回答,但我想是MySQL而不是MS SQL?但这正是让我在正确的地方寻找的答案。这似乎有效:DB::connection('sqlconnection')->select('EXEC Procedure_Name?,?,?',array($adr,$part,$batch));另外,$db->pdo是受保护的属性,因此需要使用getPdo()!
$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());
    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) );