我正在用PHP编写一个Web应用程序(我对它有很好的了解),并且已经在SQL Server数据库中对存储过程进行了查询。这就是我使用其中一个的方法:
function exampleFunction ($productId, $serialNbr, $companyName1, $companyName2, $companyName3) {
return ' exec dbo.getStuffFromDatabase @product_id = ' . $productId . ',
@serial_id = ' . $serialNbr . ',
@is_company_name1 = ' . $companyName1 . ',
@is_company_name2 = ' . $companyName2 . ',
@is_company_name3 = ' . $companyName3;
}
我之前从未使用过数据库编程,可能我正在做一些简单的错误,但是我无法让它工作。我想知道是否有一些我错过的$ companyName-variables - 据我所知它们就像布尔(bit:s)可以取值0和1.我尝试过使用true / false,整数和这些值的字符串,没有工作。 当我在SQL Server管理器中执行此查询时,它可以正常工作。
谢谢!
编辑:
Server Management Studio中的脚本:
declare @product_id varchar(16)
declare @serial_id int
declare @is_company_name1 bit
declare @is_company_name2 bit
declare @is_company_name2 bit
set @product_id = 'all'
set @serial_id = 9999999
set @is_company_name1 = 0
set @is_company_name2 = 0
set @is_company_name2 = 1
exec [dbo].[getStuffFromDatabase]
@product_id = @product_id,
@serial_id = @serial_id,
@is_company_name1 = @is_company_name1,
@is_company_name2 = @is_company_name2,
@is_company_name3 = @is_company_name3
答案 0 :(得分:2)
product_id
周围需要一些引号:
return ' exec dbo.getStuffFromDatabase @product_id = \'' . $productId . '\',
@serial_id = ' . $serialNbr . ',
@is_company_name1 = ' . $companyName1 . ',
@is_company_name2 = ' . $companyName2 . ',
@is_company_name3 = ' . $companyName3;
但是,您可能希望查看是否存在使用参数的工具,而不是将SQL构建为单个字符串。这对于帮助您避免SQL注入的可能性大有帮助。
答案 1 :(得分:0)
您需要创建从PHP到SQL Server的连接,最好使用SQLSRV或PDO扩展。 (基本上是SQL Server Manager为您做的事情)
$pdo = new PDO(...);
$stmt = $pdo->prepare('exec dbo.getStuff ...');
$res = $stmt->execute(array($productId, $serialNbr, ...));
return $res;
代替......你需要提供所需的论据。
请参阅:
编辑:在stackoverflow上找到一些示例:
虽然他们也有问题,但他们确实给出了执行存储过程所需要的好印象。
Edit2:使用sqlsrv _ *的另外几个例子: