我的问题:
tdbcmyslq 1.1.3版本仅适用于10.5.11之前的mariadb libs和mariadb客户端在更高版本的mariadb-libs上,allrows和prepare语句会导致segfault。
我的代码:
package require tdbc::mysql
namespace import ::tdbc::mysql::*
connection create db -host 127.0.0.1 -port 3306 -passwd mypass -user root -database mydb
#working on all configs
db evaldirect "select product_id from product_to_category where category_id=555"
#seg fault on mariadb-libs above 10.5.11
db allrows { select * from category_description }
db prepare { select * from category_description }
这段代码在最新的Arch linux发行版和最新的Alpine linux服务器上出现错误mariadb客户端和mariadb libs 10.6.9。如果我将mariadb libs降级为10.5.11 ,效果会很好
请你测试一下这个,如果它有错误,请报告错误,或者告诉我如何报告错误。
Upd:
我已经找到错误报告的位置了
https://core.tcl-lang.org/tdbcmysql/tktview?name=79e85de788
应该在tdbc::mysql1.1.5中修复Bug。
解决方法是将MySQL客户端库与MariaDB客户端库一起安装。在基于Debian的系统上,
sudo apt install libmysqlclient21
这不应该干扰MariaDB客户端库,并且tdbc::mysql在MariaDB服务器上与mysql客户端运行良好(或者我早就注意到这个问题了!(
我在stackoverflow中发布了一个问题,稍后在comp.lang.tcl中发布,最后在tdbc中打开了一个票证:mysql:
Win32-tdbc 1.1.2-tcl/tk 8.6.11
你好,正在测试这个脚本(当然,参数不是真实的(:
package require tdbc::mysql
tdbc::mysql::connection create test_conn -user test_admin -passwd
test_passw -db test -host www.test.com -port 3306
set consulta "SELECT * FROM entes"
set sentencia [test_conn prepare $consulta ]
$sentencia foreach row {
puts $row
}
$sentencia close
test_conn close
我得到这个
退出代码:3221225477
但是,使用此
放入[test_conn evaldirect$consulta]
我得到了正确的清单。
在测试了libmariadb.dll的几个版本后,我可以确认只有3.1.17有效,3.2.7和3.3.1都失效。
后来我测试了一个";固定的";1.1.4版本,但对我来说也不起作用。
在使用我不起眼的C专业知识调试之后,我将问题追溯到以下行:
if (Tcl_GetCommandInfo(interp, "::tcl::build-info", &info)) {
是在tcl 8.7之后添加的命令tcl::build-info。
对于所有这些,我在另一张票上发表了评论:
我对8.6.xx的测试失败了,但这似乎是由新功能引起的在8.7中。
我无法确认,因为所有Win32二进制发行版都是8.6.xx
我希望有人能在tdbc::mysql中检查并修复这个问题。
Saludos,
Alejandro