do_replace() не работает?
При попытке ATK4 я обнаружил проблему:
$this->api->db->dsql()->table('person')->set('id', 1)->set('name', 'Test user')->do_replace();
Это не работает. Затем я посмотрел немного глубже в источнике ATK4 и нашел в /opt/ipism/www/atk4/lib/DB/dsql.php строки
public $sql_templates=array(
'select'=>"select [options] [field] [from] [table] [join] [where] [group] [having] [order] [limit]",
'insert'=>"insert [options_insert] into [table_noalias] ([set_fields]) values ([set_values])",
'replace'=>"replace [options_replace] into [table_noalias] ([set_fields]) values ([set_values])",
'update'=>"update [table_noalias] set [set] [where]",
'delete'=>"delete from [table_noalias] [where]",
'truncate'=>'truncate table [table_noalias]',
'describe'=>'desc [table_noalias]',
);
После изменения строки замены на
'replace'=>"replace into [table_noalias] ([set_fields]) values ([set_values])",
это сработало для меня (удалив options_replace и добавив ' s ' к set_value). Я использую последнюю версию из git с подключением к базе данных MySQL.
Но я не уверен, неправильно ли я использую do-replace()?
До свидания...
Кстати: есть ли способ отправить исправления, не создавая учетную запись на GitHub или где-то еще?
Редактировать: Вот вывод, если options_replace не удален из шаблона:
замените [options_replace] на значения `person` (`id`,`name`) ("1","John Doe") [:a_2,:a]Ошибка приложения: сбой запроса к базе данных
Exception_DB, код: 0
Дополнительная информация:
- pdo_error: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '[options_replace] значениями `person` (`id`,`name`) ('1'в строке 1
- режим: заменить
- Титулы:
- : a: 1
- : a_2: Джон Доу
- запрос: замените [options_replace] на значения `person` (`id`,`name`) (:a,:a_2)
- шаблон: замените [options_replace] на значения [table_noalias] ([set_fields]) ([set_values])
/opt/ipism/www/atk4/lib/DB/dsql.php:1519
Трассировки стека:File ObjectStack Trace / opt / ipism / www / atk4 / lib / BaseException.php: 63 Exception_DBException_DB-> collectBasicData (Null) / opt / ipism / www / atk4 / lib / AbstractObject.php: 545 Exception_DBException_DB-> __construct () Query Failed ", Null) / opt / ipism / www / atk4 / lib / DB / dsql.php: 1519 sample_project_db_db_dsql_mysqlDB_dsql_mysql-> исключение (" Ошибка запроса базы данных ") /opt/ipism/www/atk4sl / DB . PHP: 1586 sample_project_db_db_dsql_mysqlDB_dsql_mysql-> Execute () / Opt / ipism / WWW / atk4 / Библиотека / DB / dsql.php: 1624 sample_project_db_db_dsql_mysqlDB_dsql_mysql-> заменить () / Opt / ipism / WWW / страницы / test.php: 40 sample_project_db_db_dsql_mysqlDB_dsql_mysql-> do_replace () / opt / ipism / www / atk4 / lib / AbstractObject.php: 306 sample_project_testpage_test-> init () / opt / ipism / www / atk4 / lib / ApiFrontend.php: 130 sample_projectFrontend-> add ("page_test", "test", "Content") /opt/ipism/www/atk4 / lib / ApiWeb.php: 428 sample_projectFrontend-> layout_Content () / opt / ipism / www / atk4 / lib / ApiFrontend.php: 39 sample_ projectFrontend-> addLayout ("Content") /opt/ipism/www/atk4 / lib / ApiWeb.php: 275 sample_projectFrontend-> initLayout () / opt / ipism / www / index.php: 15 sample_projectFrontend-> main ()
Примечание. Чтобы скрыть эту информацию от своих пользователей, добавьте $config['logger']['web_output']=false в файл config.php. Обратитесь к документации на "Регистратор" для альтернативных вариантов регистрации
1 ответ
Replace по своей природе аналогичен "insert", но вместо сбоя, когда первичный ключ дублируется, он заменяет значение.
Пожалуйста, добавьте ->debug() к вашей строке перед do_replace и дайте мне вывод, который поможет мне понять, почему этот параметр нужно удалить.
set_value, похоже, опечатка, я изменил ее и превратил в master: https://github.com/atk4/atk4/commit/24b20865b9e3345a8e7504dfb68b7ef96335009e
лучший способ отправить изменения - создать запрос на извлечение. Наилучший способ сообщить о проблемах - это "проблемы" в github.