PHP + MS SQL Сервер: вложенные хранимые процедуры действуют иначе, чем при запуске непосредственно в базе данных. - PullRequest
0 голосов
/ 14 апреля 2020

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

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

1 Ответ

1 голос
/ 14 апреля 2020

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

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

  1. В сценарии PHP установить
sqlsrv_configure("WarningsReturnAsErrors", 0);
Обновите ваш php .ini, чтобы включить
sqlsrv.WarningsReturnAsErrors = 0
...