Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: не отрабатываються инсерты в MSSQL из php

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Scorpion15
Отправлено: 29 Октября, 2015 - 13:34:59
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Добрый день!
Подключился к mssql через freetds(у меня Ubuntu 14.10), в конфиги mssql указал кодировку utf8 для того что бы нормально русские буквы на странице выводились.
Select работает прекрасно. А вот с insert проблемы, не записываются данные в MSSQL 2012, в profile транзакции появляются, last insertid выдает новый id, но данные в базу не заносятся. Подключаюсь через pdo. Что за чудеса могут быть, и как это исправить?
 
 Top
Dastor
Отправлено: 29 Октября, 2015 - 22:02:24
Post Id


Гость


Покинул форум
Сообщений всего: 66
Дата рег-ции: Окт. 2014  


Помог: 3 раз(а)




Может Вы не делаете коммит?
 
 Top
Scorpion15
Отправлено: 30 Октября, 2015 - 06:28:31
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Я пробовал разными способами и :
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.                 $statement_handler=$database_handler->prepare($sqlQuery);
  3.                 $statement_handler->execute();
  4.                 return $database_handler->lastInsertId();
  5.  

И вот так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $database_handler->beginTransaction();
  3. $statement_handler=$database_handler->prepare($sqlQuery);
  4. $statement_handler->execute();
  5. $database_handler->commit();
  6. return $database_handler->lastInsertId();
  7.  

Все равно не работает. Даже если просто вызываешь встроенную процедуру. Может надо как то по другому это все вызывать?

(Отредактировано автором: 30 Октября, 2015 - 06:37:16)

 
 Top
Faraon-san
Отправлено: 30 Октября, 2015 - 09:26:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




посмотри логи в самой базе, какой запрос к нему приходит.
 
 Top
Scorpion15
Отправлено: 30 Октября, 2015 - 10:51:22
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Смотрел profile, там нормальные запросы приходят
 
 Top
Dastor
Отправлено: 30 Октября, 2015 - 11:30:42
Post Id


Гость


Покинул форум
Сообщений всего: 66
Дата рег-ции: Окт. 2014  


Помог: 3 раз(а)




Может быть ошибка в запросе? PDO по умолчанию не выкидывает эксепшн.
Что возвращает $statement_handler->errorInfo(); после $statement_handler->execute()

А lastInsertId может возвращает id других успешных инсертов.
 
 Top
Faraon-san
Отправлено: 30 Октября, 2015 - 11:34:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




PHP:
скопировать код в буфер обмена
  1. $database_handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

вот так будет выбрасывать
 
 Top
Panoptik
Отправлено: 30 Октября, 2015 - 11:38:25
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




а еще длиннее переменные нельзя называть
$database_mssql_2012_server_i_am_very_cool_programmer_handler = new PDO()

это ппц...
называйте переменные кратко и понятно: $db $stmt

второе: показывайте запрос и больше информации связанной с запросом. а то тема - очередное гадание на кофейной гуще


-----
Just do it
 
 Top
Scorpion15
Отправлено: 30 Октября, 2015 - 12:03:30
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.     $database_handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  3.  

Этот параметр установлен. Ошибок нет. Запрос самый простой для теста специально беру:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. INSERT INTO TABLE (FULLNAME) VALUES(NULL)
  3.  

Какую информацию еще надо показать?
 
 Top
Panoptik
Отправлено: 30 Октября, 2015 - 13:15:31
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




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


-----
Just do it
 
 Top
Scorpion15
Отправлено: 30 Октября, 2015 - 14:33:17
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Этот запрос я выполняю в managment studio, все хорошо. Подключаюсь точно туда куда надо, т.к. select и транзакции вижу.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB