Мне нужно записать на удаленный 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() все отлично работает и изменений вносить не пришлось.