2010-10-15 3 views
1

Я пытаюсь выполнить хранимую процедуру с php.Ошибка хранимой процедуры SQL Server при выполнении с php

В PHP код IAM отправки целочисленный параметр хранимой процедуры

$orderId =824; 
$result =mssql_bind($sp, "@orderID", $orderId, SQLINT1, true, false); 

Я получаю сообщение об ошибке

mssql_execute() [function.mssql-Execute]: сообщение: Формальный параметр «@ orderID "не был объявлен как параметр OUTPUT, а фактический параметр передан в запрошенном выходе. (Тяжесть 16)

Может ли одна сказать причина, пожалуйста

ответ

3

document of mssql_bind дает подпись его как:

bool mssql_bind (resource $stmt , string $param_name , mixed &$var , int $type [, bool $is_output = false [, bool $is_null = false [, int $maxlen = -1 ]]]) 

Так что ваша проблема в том, вы устанавливаете $is_output как истинный.

Использование

$orderId =824; 
$result =mssql_bind($sp, "@orderID", $orderId, SQLINT1, false, false); 
+0

+1 та же проблема, другой подход. Держу пари, ваше право. – bobs

+0

Я подозреваю, что, поскольку Linto говорит «отправка целочисленного параметра в хранимую процедуру» – SamStephens

+0

У меня все работает, но одна проблема. Когда я отправил небольшой oderid (например, 1,225,100,596, ..), он работает, но когда я отправил большой идентификатор заказа, например, (100303), это не дает выход, хотя есть записи для этого порядка. Поэтому я изменил параметр типа mssql_bind со всеми наиболее всего, тогда я получу результат с предупреждением «Warning: mssql_execute() [function.mssql- выполнить]: ПРЕДУПРЕЖДЕНИЕ! Некоторые символы не могут быть преобразованы в набор символов клиента. Неконвертированные байты были изменены на вопросительные знаки («?»). (серьезность 16) ». У вас есть идея –

0

Вы должны создать хранимую процедуру так, что указывает на то, что параметр в качестве выходной переменной.

DECLARE MyProc (@orderID int OUTPUT) AS ... 
+0

так что мне нужно, чтобы создать эту конкретную хранимую proceedure в PHP коде? Я имею в виду хранимого proceedure из SQL Server –

+0

No. Если хранимая процедура должна иметь параметр @orderID как вы можете изменить его с помощью той же техники/инструмента, в которой она была создана. Ожидаете ли вы, что хранимая процедура отправит значение @orderID в ваш PHP-код? Если нет, то вы хотите посмотреть на @SamStephens ответ и оставить процедуру без изменений. – bobs

+0

У меня все работает, но одна проблема. Когда я отправил небольшой oderid (например, 1,225,100,596, ..), он работает, но когда я отправил большой идентификатор заказа, например (100303), он не выдавал вывод, хотя есть записи для этого заказа. Так я изменил параметр типа mssql_bind со всеми наиболее всего, тогда я получу результат с предупреждением «Предупреждение: mssql_execute() [function.mssql-execute]: ПРЕДУПРЕЖДЕНИЕ! Некоторые символы не могут быть преобразованы в набор символов клиента Непрозрачные байты были изменены на вопросительные знаки («?»). (Серьезность 16) ». Есть ли у вас какие-либо идеи –

Смежные вопросы