Mssql_connect / PDO('sqlsrv'). Как сделать команду на UPDATE?

Мне нужно записать на удаленный MSSQL сервер из PHP некоторые данные. На чтение все работает отлично, а при попытке сделать UPDATE, ничего не происходит. Может есть у кого идеи в чем может быть дело?

public static function set_finish_date($ID, $date)
	{
		if(function_exists('mssql_connect'))
		{
			$arResult['connection_type'] = 'mssql_connect';
			$connection = mssql_connect(self::$host, self::$user , self::$password);
			if ( !$connection ) {
				if ( function_exists('error_get_last') ) {
					var_dump(error_get_last());
				}
				$arResult['error'][] = 'connection failed';
			}
			$db = mssql_select_db(self::$database, $connection)
			or $arResult['error'][] = 'Не удалось выбрать БД';
			$result = mssql_query('UPDATE Pmark SET Finish='.$date.' WHERE ID='.$ID);
			if($result)
			{
				$arResult['success'] = true;		
			}
			else 
			{
				$arResult['error'] = 'Не удалось записать значение';	
			}
		}
		else 
		{
			$arResult['connection_type'] = 'PDO';
			#Соединение
			$db = new PDO("sqlsrv:Server=".self::$host.";Database=".self::$database, self::$user, self::$password);
			#Смена даты
			$stmt = $db->prepare('UPDATE Pmark SET Finish='.$date.' WHERE ID='.$ID);
			try{
				$stmt->execute();
				$arResult['success'] = "Успешно создана новая запись";
			}
			catch(PDOException $e) {
				$arResult['error'] = $e->getMessage();
			}
		}
		return CUtil::PhpToJSObject($arResult);		
	}


Возвращает:
{'connection_type':'PDO','error':'SQLSTATE[42000]: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Неправильный синтаксис около конструкции "00".'}

А с другого сервера:
{'connection_type':'mssql_connect','error':'Не удалось записать значение'}

------------После решения проблемы--------------------
Проблема изначальная была в отсутствии кавычек перед датой, переписал так:
$stmt = $db->prepare("UPDATE Pmark SET Finish='".$date."' WHERE ID='".$ID."'");

Вторая проблема была в форматах даты для MSSQL. Между датой и временем надо было вместо пробела поставить букву "T"(латиницей).

Для mssql_connect() все отлично работает и изменений вносить не пришлось.
  • Вопрос задан
  • 457 просмотров
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Перед тем, как пользоваться инструментом, надо хотя бы примеры работы с ним посмотреть

$db = new PDO("sqlsrv:Server=".self::$host.";Database=".self::$database, self::$user, self::$password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->prepare('UPDATE Pmark SET Finish=? WHERE ID=?')->execute([$date, $id]);
$arResult['success'] = true;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы