在尝试 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)。我正在使用带有 MySQL 数据库连接的 git 的最新版本。
但我不确定,如果我以错误的方式使用“do-replace()”?
再见...
顺便说一句:有没有一种方法可以发送修复,而无需在 GitHub 或其他地方创建帐户?
编辑:如果未从模板中删除options_replace ,则输出如下:
将 [options_replace] 替换为 `person` (`id`,`name`) 值 ("1","John Doe") [:a_2, :a]应用程序错误:数据库查询失败
异常数据库,代码:0
附加信息:
- pdo_error: SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '[options_replace] 附近使用正确的语法到 `person` (`id`,`name`) 值(第 1 行的 '1'
- 模式:替换
- 参数:
- :一: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
堆栈跟踪:文件对象名称堆栈跟踪/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(“数据库查询失败”,空)/opt/ipism/www/atk4/lib/DB/dsql.php :1519 sample_project_db_db_dsql_mysqlDB_dsql_mysql->异常(“数据库查询失败”)/opt/ipism/www/atk4/lib/DB /dsql.php :1586 sample_project_db_db_dsql_mysqlDB_dsql_mysql->执行() /opt/ipism/www/atk4/lib/DB/dsql.php : 1624 sample_project_db_db_dsql_mysqlDB_dsql_mysql->替换() /opt/ipism/www/page/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 文件中。有关其他日志记录选项,请参阅有关“记录器”的文档