Я впервые использую Laravel и у меня возникает ошибка синтаксиса SQL при сохранении модели Eloquent в БД.
SQLSTATE [42000]: [Microsoft] [Драйвер ODBC 11 для SQL Server] [SQL Server] Неверный синтаксис рядом с 's'. (SQL: обновление [plan_part] set [plan_id] = 48, [is_astm_testing_complete] = 0, [supplier_part_weight] = .0308, [danger_class_type_id] = 42, [supplier_additional_details] = test's, [updated_by] = 1003, где [plan_part_id] = 55826 )
Это связано с supplier_additional_details = test's
, где у меня есть апостроф в значении.
Я не понимаю, почему это происходит, потому что я думал, что метод сохранения Eloquent использует PHP PDO и связанные параметры, о чем свидетельствует трассировка стека в ответе об ошибке:
Connection->runQueryCallback('update [plan_part] set [plan_id] = ?, [is_astm_testing_complete] = ?, [supplier_part_weight] = ?, [hazard_class_type_id] = ?, [supplier_additional_details] = ?, [modified_by] = ? where [plan_part_id] = ?', array('48', 0, '.0308', '42', 'test\'s', 1003, '55826'), object(Closure))
Я вижу, что апостроф, по-видимому, автоматически экранирован (я ничего не делал, чтобы добавить косую черту), но не привязанные параметры автоматически делают это для меня?
Почему Laravel ошибается из-за этого, когда кажется, что он все-таки правильно сбежал? Должен ли я вручную экранировать каждый вход в логике моего контроллера?
Это кажется неправильным и ненужным, но опять же, я не очень знаком с Eloquent / Laravel.
Логика сохранения довольно проста:
$plan_part = PlanPart::find(...);
...
$plan_part->supplier_additional_details = $request->supplier_additional_details;
$plan_part->save();
Что я делаю не так?
FWIW, я использую SQL Server, а не MySQL, поэтому я не уверен, есть ли там нюансы, которые я не понимаю.
UPDATE
Похоже, SQL Server использует двойные одинарные кавычки вместо косых одинарных кавычек для экранирования. Кто-нибудь знает, что я должен сделать, чтобы Laravel лучше работал с SQL Server?