PHP + MS SQL Server:嵌套存储过程的行为与直接在数据库上运行时不同

不幸的是,由于我不能分享我公司的代码,所以我会有点含糊,所以我提前道歉。


我发现存储过程(调用其他存储过程)在我们的 MS SQL Server 数据库中存储员工的方式存在差异。当直接在数据库上运行(使用我的 PHPStorm 控制台)时,当尝试添加任意数量的员工时,它会正确地添加他们。然而,当通过 PHP 运行时,实际上只插入了一个随机数。我的 PHP 设置类似于:


$con = sqlsrv_connect($host . ',' . $port, [

    "Database" => $database,

    "UID" => $user,

    "PWD" => $password,

    "ReturnDatesAsStrings" => true,

    "CharacterSet" => "UTF-8"

]);


$sql = "EXEC EmployeeAdd '[{ json data here }]'"

$stmt = sqlsrv_query($con, $sql);

我也尝试了 PDO 库并看到了相同的结果。


sqlsrv有没有人在使用 PHP或PDO库运行嵌套存储过程时遇到问题?如果是这样,你做了什么来解决这个问题?提前致谢。


萧十郎
浏览 85回答 1
1回答

子衿沉夜

这好有趣!我们有一些print陈述导致了这个问题。删除它们解决了问题,我能够按预期导入员工。感谢您的帮助@Zhorov。更多信息:默认情况下,PHP 设置WarningsReturnAsErrors为打开。因为 print 语句生成01000带有错误代码的警告#0,PHP 将其视为错误并立即停止执行。要在不删除print语句的情况下解决此问题,您可以:在 PHP 脚本中,设置sqlsrv_configure("WarningsReturnAsErrors", 0);更新您的 php.ini 以包含sqlsrv.WarningsReturnAsErrors = 0
打开App,查看更多内容
随时随地看视频慕课网APP