php - 带有时间戳的参数化查询上的 MonetDB-PHP 错误
问题描述
我正在将 MonetDB 与 MonetDB-PHP 库一起使用。
我遵循了以下文档:https ://github.com/MonetDB/MonetDB-PHP
一切正常,但如果我为时间戳类型列设置参数,我会收到以下错误:
来自 MonetDB 的错误:42000!函数调用的参数 1 的类型错误:char,预期的时间戳
例如,
这是有效的:
$result = $connection->Query(<<<EOF
select
*
from
"cats"
where
"name" = ?
and "weight_kg" > ?
limit
10
EOF
, [ "D'artagnan", 5.3 ]);
但这不起作用:
$result = $connection->Query(<<<EOF
select
*
from
"cats"
where
"name" = ?
and "weight_kg" > ?
and "birthdate" < ?
limit
10
EOF
, [ "D'artagnan", 5.3, "2020-02-28 12:37:16" ]);
任何时间戳类型的列都会发生错误,并且仅在将值作为参数传递时才会发生。
我究竟做错了什么?
编辑:这是我正在使用的实际表
CREATE TABLE sys.url_data (
userid varchar(50),
groupid varchar(50),
category varchar(50),
url varchar(1024),
datetime timestamp
);
“日期时间”是我在查询中使用的列
解决方案
已部署修复程序。更新到版本1.1.3
。这些timestamp
值必须作为DateTime
对象传递。
使用您的示例表,如下所示:
$dt = DateTime::createFromFormat("Y-m-d H:i:s", "2020-02-28 12:37:16");
$result = $connection->Query(<<<EOF
select
*
from
sys.url_data
where
datetime > ?
EOF
, [ $dt ]);
要使用微秒:
$dt = DateTime::createFromFormat("Y-m-d H:i:s.u", "2020-02-28 12:37:16.123456");
还更新了有关准备好的声明的文档:
推荐阅读
- nearprotocol - How do you generate a valid keypair for NEAR protocol from the command line?
- javascript - How to add a front-end framework (React, Vue, etc.) to SailsJS?
- c# - send large json string via httpclient
- python - 将乌龟移动一圈并将其作为 ros 节点停止在初始位置?
- node.js - 以相同的方法多次更新相同的列表 - Hyperledger Fabric Chaincode node js
- javascript - 如何将日期/文本传递给?
- javascript - How to get checkbox data on form submit in react
- javascript - How to modularize Vuex into different folders and files
- webhooks - 从获取 webhook 响应嵌套 json 创建数组
- constants - Joomla 3.9.19 在组件显示功能中从全局配置中获取常量