【问题标题】:Tcl/MySQL Query: comparing integer to secondsTcl/MySQL 查询:将整数与秒进行比较
【发布时间】:2015-03-03 04:31:55
【问题描述】:

我有一个 [clock seconds] 值保存在“ablaufdatum”列中的数据库。 我有一个 Tcl 脚本,它从现在开始获取 [时钟秒数] 并选择所有较旧的条目。但不知何故,以下查询不起作用,我不知道为什么。你能帮帮我吗?

set systemTime [clock seconds]
set queryanzahlalteuser [::mysql::query $db {SELECT COUNT(*) FROM tbl_ticket WHERE aktiv='1' AND erstellt='1' AND ablaufdatum<'$systemTime'}]

ablaufdatum 也是一个 ],但在 mysql 数据库中保存为整数。

这不会返回任何值。 我试过了

puts "SELECT COUNT(*) FROM tbl_ticket WHERE aktiv='1' AND erstellt='1' AND ablaufdatum<'$systemTime'" 

如果输入到 phpMyAdmin 控制台,显示的查询可以正常工作并返回值。

这可能是整数格式造成的吗? 还是我必须以不同的方式格式化当前时间?

提前致谢

【问题讨论】:

    标签: mysql tcl


    【解决方案1】:

    我对 mysql 不熟悉(我更多地使用 sqlite),但我检查了manuals 并且似乎命令::mysql::query 在使用大括号时不进行变量替换,因此请尝试使用以下命令:

    set systemTime [clock seconds]
    set queryanzahlalteuser [::mysql::query $db "SELECT COUNT(*) FROM tbl_ticket WHERE aktiv='1' AND erstellt='1' AND ablaufdatum<'$systemTime'"]
                                              # ^                                                                                              ^
    

    使用双引号应该可以。

    【讨论】:

    • 并且可能删除变量周围的单引号。我不建议从一般的 sql 角度将整数数据类型与字符串进行比较。
    • mysqltcl好像不支持参数化SQL语句。正是出于这个原因,我现在推荐 tdbc::mysql (遵循 TDBC API)。
    • 感谢您的输入,我查看了 tdbc::mysql 但似乎找不到很多文档...我正在加载以下软件包(我必须先下载它们还是这些是否包含在 Tcl 版本 8.6 中?我加载包的方式是否有问题(Windows Server 2008 R2)?包需要 tdbc 包需要 tdbc::mysql 脚本只是在那部分结束......(我在此要求之前和之后放置“放在前面”和“放在后面”,并且只有前面显示......)
    • @Rory 抱歉,我无法帮助您加载这些包,因为我根本不熟悉它们。我的 Tcl8.6 上有 tdbc 包,但没有 tdbc::mysql。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多