我的问题是:
tdbcmyslq版本1.1.3只适用于mariadb和mariadb-客户端,在更高版本的mariadb、allrows、和准备语句时才能执行分段错误。
我的代码:
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发行版上以及带有mariadb和mariadb 10.6.9的最新Alpine服务器上都存在分段错误。如果我把mariadb-libs降级到10.5.11的话,效果会很好。
请您可以测试这个,如果它的错误,bugreport它,或告诉我如何安装。
Upd:
我已经找到该去哪里了
发布于 2022-09-05 18:26:15
Bug应该在tdbc::mysql 1.1.5中修复。
解决办法是在安装MySQL客户机库的同时安装MariaDB客户端库。在基于Debian的系统上,
sudo apt install libmysqlclient21就能做到。
这不应该干扰MariaDB客户端库,并且tdbc::mysql在MySQL客户机上对MariaDB服务器运行良好(否则我会更早地注意到这个问题!)
发布于 2022-09-07 04:57:54
我在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值直接$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::build添加在tcl 8.7之后。
尽管如此,我在其他票证上发表了一条评论
我的8.6.xx测试失败了,但是这似乎是8.7中新特性造成的。我无法确认,因为所有的Win32二进制发行版都是8.6.xx
我希望有人能够在tdbc::mysql中检查并修复这个问题。
干杯,
亚历杭德罗
https://stackoverflow.com/questions/73596701
复制相似问题