PHP Вставка SQL Server проблема - PullRequest
0 голосов
/ 16 июля 2009

Следующий оператор отлично работает в студии управления сервером MS SQL. Однако, когда я пытаюсь выполнить через PHP, вставка не происходит, и ошибки не возвращаются. Я знаю, что мое соединение действительно, все мои операторы выбора возвращаются правильно. Чего мне не хватает?

DECLARE @id bigint; SET @id = (SELECT MAX(application_track_id) + 1 FROM application_track_data); INSERT INTO application_track_data (application_track_id,user_id, action_key, action, ip_address, session_id, application) VALUES (@id,1,'584','login','192.168.37.60','05sn3618p61dvmml6pkefuteg2','akamata');

Вот код, который я использую для выполнения sql.

$result = mssql_query($sql);
if(!$result)
{
print "Error:" . mssql_get_last_message();
}
else
print "Success";

Ответы [ 5 ]

1 голос
/ 16 июля 2009

Хорошо, у меня это работает. Я перешел на использование драйвера сервера SQL, предоставленного Microsoft, который можно найти здесь http://www.microsoft.com/downloads/details.aspx?FamilyId=61BF87E0-D031-466B-B09A-6597C21A2E2A&displaylang=en.

Очевидно, что драйвер mssql не может работать с определенными типами данных, такими как bigint.

1 голос
/ 16 июля 2009

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

ОБНОВЛЕНИЕ: Попробуйте это: http://us3.php.net/manual/en/function.mssql-next-result.php

Полагаю, он допускает несколько запросов, но вам нужно получить правильный. Есть также некоторые библиотеки db, которые имеют функцию * _query_multiple, но только в библиотеках mysqli или maxdb.

0 голосов
/ 16 июля 2009

Попробуйте только оператор вставки. Если это работает, то вы знаете, что наличие нескольких операторов вызывает ошибку (и вам нужно заменить свои запросы хранимой процедурой). Если произойдет сбой, jsight верен, проблема с автокоммитом.

Лично я бы сделал ставку с несколькими утверждениями, но это должно дать вам способ определить основную причину (возможно, обе проблемы).

0 голосов
/ 16 июля 2009

Этот вид деятельности действительно должен быть в хранимой процедуре. Проще управлять и проще звонить с php. Вы также должны фиксировать эти изменения каждый раз.

0 голосов
/ 16 июля 2009

Полагаю, вы работаете с выключенной автоматической фиксацией и не совершаете транзакцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...