我有一个在MSSQL 2008 R2中运行的存储过程,我正在使用PHP 5.3,我可以成功连接到数据库并检索数据,但我一直在尝试调用存储过程并且没有成功,我需要将参数传递给存储过程然后在这里得到结果是我的代码,但它没有成功执行。任何人请举例说明我如何做到这一点。
<?PHP
$sql = " { call rpt_TOP_PRODUCTS } ";//my stored procedure
$param1 = 10;
$param2 = 'E';
$param3 = 'SZ';
$params = Array(Array($param1,$param2,$param3, SQLSRV_PARAM_IN)//parameters to be passed );
$stmt = sqlsrv_query($conn,$sql,$params);
if ($stmt===false) {
// handle error
echo 'Success No';//THIS IS WHERE ITS GOING WHEN I RUN THE CODE
print_r(sqlsrv_errors,true);
} else {
if (sqlsrv_execute($stmt)===false) {
// handle error. This is where the error happens
print_r(sqlsrv_errors,true);
echo 'Success Not ';
} else {
echo 'Success True Yeah';//THIS IS WHERE I WANT IT TO COME.
}
}
<?
答案 0 :(得分:1)
你的print_r()调用是错误的,它们应该是
print_r(sqlsrv_errors(), false);
^^---missing in yours
如果没有(),PHP会将其视为未定义的常量并且不输出任何内容。使用(),它是一个函数调用,它将从数据库调用中返回错误消息。
尝试重新运行代码并查看错误。
答案 1 :(得分:0)
试试这个
<?php
$sql = " { call rpt_TOP_PRODUCTS} ";//my stored procedure
$param1 = 10;
$param2 = 'E';
$param3 = 'SZ';
$params = array($param1,$param2,$param3);//parameters to be passed );
$stmt = sqlsrv_prepare($conn,$sql,$params)or die(print_r(sqlsrv_errors(),true));
if ($stmt===false) {
// handle error
echo 'Success No';//THIS IS WHERE ITS GOING WHEN I RUN THE CODE
print_r(sqlsrv_errors(),true);
} else {
if (sqlsrv_execute($stmt)===false) {
// handle error. This is where the error happens
print_r(sqlsrv_errors(),true);
echo 'Success Not ';
} else {
echo 'Success True Yeah';//THIS IS WHERE I WANT IT TO COME.
}
}?>
如果您的程序不存在,您将收到错误消息,指出无法找到该程序
答案 2 :(得分:0)
您需要定义参数在查询中的位置
call rpt_TOP_PRODUCTS(?,?)
答案 3 :(得分:0)
迟到总比没有好。 Marc B对你的print_r函数是正确的。此外,使用sqlsrv PHP函数,您必须先准备一个带有“sqlsrv_prepare()”的查询,然后才能执行它。只需改变:
$stmt = sqlsrv_query($conn,$sql,$params)
为:
$stmt = sqlsrv_prepare($conn,$sql,$params)
它应该运行得很好。