При вставке в MSSQL с использованием PHP PDO Dblib у меня возникает эта ошибка
сигнал выхода Ошибка сегментации в журнале ошибок apache
Когда я проверял бесплатный журнал tds,ошибка
Запрос ROLLBACK TRANSACTION не имеет соответствующей BEGIN TRANSACTION
Однако это происходит только для конкретного случая, когда у меня есть строка для типа данных с плавающей запятой.Ниже приведен мой код:
$conn = new PDO('dblib:host=hostname;dbname=mydbname', 'user', 'password');
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$conn->beginTransaction();
$query = 'INSERT INTO [TestTable] ([RecordNo], [Paymode], [VATVALUE])
VALUES (:RecordNo, :Paymode, :VATVALUE)';
$stmt = $conn->prepare($query);
try {
$stmt->execute( [":VATVALUE" => "158.4'", ":Paymode" => "CREDIT",
":RecordNo" => "ABC-312735"] );
$conn->commit();
} catch(PDOException $e) {
$conn->rollback();
}
Обратите внимание на значение НДС, которое я установил как
158,4 '
для воспроизведения ошибки.Однако, когда я удаляю операторы транзакции, он выдает правильную ошибку, т.е.
Ошибка преобразования типа данных varchar в float
Интересно, что beginTransaction () работает отлично, если яукажите неверное имя столбца в выписке.Транзакция не работает только для этой ошибки преобразования и ошибки сброса сегментации сигнала.
Я использую PHP 7.0 в Ubuntu 16.04.Хотите знать, почему откат работает нормально во всех случаях, таких как неправильные имена столбцов или таблиц, но не в случае преобразования.