Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用PDO获取SQL Server输出参数的值&;ODBC_Php_Sql_Parameters_Pdo_Output - Fatal编程技术网

Php 使用PDO获取SQL Server输出参数的值&;ODBC

Php 使用PDO获取SQL Server输出参数的值&;ODBC,php,sql,parameters,pdo,output,Php,Sql,Parameters,Pdo,Output,我一直在学习PHP,通过在我公司的一个网页上添加一些功能,在将新记录插入数据库之前验证用户对SSN的输入。那部分很好用。数据库插入涉及调用SQL Server存储过程,该存储过程具有一个输出参数,该参数返回新记录的GUID以供后续过程使用。数据库插入部分可以工作,但当我回显返回参数的值时,它是一个空字符串 以下是相关细节: SQL Server 2008在单独的服务器上运行 在Windows 64 PC上运行的WAMP Server 2.2 PHP 5.3.1 Apache 2.2.22 以下是

我一直在学习PHP,通过在我公司的一个网页上添加一些功能,在将新记录插入数据库之前验证用户对SSN的输入。那部分很好用。数据库插入涉及调用SQL Server存储过程,该存储过程具有一个输出参数,该参数返回新记录的GUID以供后续过程使用。数据库插入部分可以工作,但当我回显返回参数的值时,它是一个空字符串

以下是相关细节: SQL Server 2008在单独的服务器上运行 在Windows 64 PC上运行的WAMP Server 2.2 PHP 5.3.1 Apache 2.2.22

以下是我的PHP代码:

$conn = new PDO( "odbc:Driver={SQL Server};Server=xxx.xxx.xx.xx;Database=xxxxx;charset=UTF-8'", "uid", "pwd");

if(!$conn) {
    die( "<br />Error connecting to SQL Server");
}

$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

$resource_id = "";

$stmt = $conn->prepare("{CALL xxxx.dbo.app_sp_insert_rq(?, ?, ?, ?, ?, ?, ?, ?)}");

$stmt->bindParam(1, $survey_text, PDO::PARAM_STR);
$stmt->bindParam(2, $event_date, PDO::PARAM_STR);
$stmt->bindParam(3, $type_id, PDO::PARAM_STR);
$stmt->bindParam(4, $description, PDO::PARAM_STR);
$stmt->bindParam(5, $folder_id, PDO::PARAM_STR);
$stmt->bindParam(6, $has_details, PDO::PARAM_STR);
$stmt->bindParam(7, $uid, PDO::PARAM_STR);
$stmt->bindParam(8, $resource_id, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 100); 

$stmt->execute();

echo $resource_id;

任何帮助都将不胜感激。我只是通过多次搜索才走到了这一步,但这是一个我一直无法找到解决办法的障碍。

这应该是可行的-根据。 但是,据说
PDO::PARAM_INPUT\u OUTPUT
代表
INOUT
参数,而您使用的是
OUT

您可以尝试这种方法-因为显式设置
$length
参数(同时保留
PDO::PARAM_INPUT\u OUTPUT
)会触发
OUT
模式

$stmt->bindParam(8, $resource_id, PDO::PARAM_STR, 100);
但我认为它也应该像INOUT一样工作(正如您最初编写代码一样)

可能C级的PDO驱动程序(或ODBC驱动程序)不支持输出参数绑定(如PDO MySQL)

但如果这是过程中唯一的
OUT
参数,则可以使用以下函数:

SELECT func(?, ?, ..., ?) AS result

+1:可能您感兴趣的是

SQL Server不认识输入-输出参数的概念,只认识输入或输出,当然PHP没有输出,只有输入-输出,或者如果我没有弄错的话,没有输入参数。正如你所说,这确实应该有效,但我会在完成其他两项任务后尝试你的建议。谢谢试过了,但没用。也许我得写一个函数。我希望使用现有的代码。我采取了简单的方法,从存储过程中删除了输出参数,并在过程的末尾添加了:select@resource\u id。现在我可以访问PHP代码中需要的值。
SELECT func(?, ?, ..., ?) AS result