2013-11-12 2 views
5

Итак, у меня есть хранимая процедура, которую я бы назвал, она принимает один аргумент как целое число и возвращает 10 компаний. Вот SP внутри MSSQL http://pastebin.com/shhakP81Вызов хранимой процедуры с SQLSRV

вот мой SQL заявление

$companiesSQL = "{call WEBgetCompanylistByIndIDTen(?)}"; 

параметр

$params = array(array($industryID, SQLSRV_PARAM_IN)); 

запрос

$companiesStmt = sqlsrv_query($companiesHandle, $companiesSQL, $params); 

и пытается распечатать результаты получает мне ошибку заявив, что

«sqlsrv_fetch_object() ожидает параметр 1, чтобы быть ресурсом, логический данный»

Я знаю, что $ companiesStmt ДОЛЖНА быть заявление ресурс, но это логическое, а это означает, что запрос не смогли.

while($row = sqlsrv_fetch_object($companiesStmt)) 
{ 
    echo $row->COM."<br />"; 
} 

Я знаю, что соединение работает, потому что я могу назвать другую хранимую процедуру в этой таблице, которая не имеет никаких параметров и получить результаты. Это означает, что ошибка может быть только внутри $ companiesSQL или $ Params

Я хотел бы также отметить, что Ive прошли через tleast первые 4-5 страниц Google пытается бесчисленное количество различных идей, которые я прочитали, включая пример Microsoft о получении результатов от SP (http://technet.microsoft.com/en-us/library/cc626303(v=sql.105).aspx) и даже официального сайта PHP и его комментариев.

* Редактировать Следует также упомянуть, что если я войду в студию управления сервером MSSQL и запустим хранимую процедуру, она будет работать.

Что я здесь делаю неправильно?

+0

Возможный дубликат [SQLSRV \ _fetch \ _array() ожидает параметр 1, чтобы быть ресурсом, логический дан в] (https://stackoverflow.com/q/23808512/1255289) – miken32

ответ

-1

Первое включение информации об ошибках. Убедитесь, что у вас есть достаточные привилегии для использования этой хранимой процедуры. Убедитесь, что учетная запись, используемая для создания соединения, имеет авторизацию для выполнения хранимой процедуры и доступа ко всем ресурсам, используемым хранимой процедурой. Надеюсь, это поможет, у меня возникла аналогичная проблема, когда я начал использовать SQL-сервер. Вместо отказа он возвращал пустой набор результатов.

** Редактировать

+0

Jon, спасибо, что ответили. Сообщение об ошибках и ведение журнала уже включено, я просто передал только соответствующий код. Я проверил и проверил много раз, чтобы убедиться, что у пользователя есть правильная авторизация для выполнения хранимой процедуры, я даже создал новую хранимую процедуру, чтобы убедиться, но в итоге я получаю ту же ошибку. –

+0

Можете ли вы запустить хранимую процедуру с теми же параметрами из командной строки или менеджера предприятия? –

+0

См. Это, если я запишусь в студию управления сервером MSSQL и запустим хранимую процедуру с тем же параметром, тогда она будет работать. Это странно. –

-1

У меня была подобная ошибка.

Попробуйте изменить эту строку:

$companiesStmt = sqlsrv_query($companiesHandle, $companiesSQL, $params); 

К этому, без Params:

$companiesStmt = sqlsrv_query($companiesHandle, $companiesSQL);