К сожалению, это будет немного расплывчато из-за того, что я не могу поделиться кодом своей компании, поэтому заранее прошу прощения.

Я вижу несоответствие в том, как хранимая процедура (которая вызывает другие хранимые процедуры) хранит сотрудников в нашей базе данных 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 или PDO в PHP? Если да, то что вы сделали для решения проблемы? Заранее спасибо.

0
Josh Davis 14 Апр 2020 в 17:37

1 ответ

Лучший ответ

Это весело! У нас было несколько заявлений print, которые вызвали проблему. Их удаление устранило проблему, и я смог импортировать сотрудников, как и ожидалось. Спасибо за помощь @Zhorov.

Дополнительная информация: по умолчанию PHP включает WarningsReturnAsErrors. Поскольку операторы печати генерируют предупреждение 01000 с кодом ошибки #0, PHP рассматривает это как ошибку и немедленно останавливает выполнение. Чтобы исправить это, не удаляя операторы print, вы можете:

  1. В сценарии PHP установите
sqlsrv_configure("WarningsReturnAsErrors", 0);
  1. Обновите свой php.ini, включив в него
sqlsrv.WarningsReturnAsErrors = 0
1
Josh Davis 15 Апр 2020 в 14:01