php - PHP PDO 无法绑定浮点参数以按整数字段搜索
问题描述
我有一个与 PDO 和 Postgres 相关的问题:
当我尝试按字段搜索float
值时出现错误:integer
$stmt = $con->prepare('SELECT t.* FROM my_table t WHERE t.integer_field > ?');
$stmt->execute([9.5]);
这也不起作用:
$stmt = $con->prepare('SELECT t.* FROM my_table t WHERE t.integer_field > ?');
$stmt->execute(['9.5']);
这也不起作用:
$stmt = $con->prepare('SELECT t.* FROM my_table t WHERE t.integer_field > ?');
$param = 9.5;
$stmt->bindParam(1, $param, \PDO::PARAM_INT);
$stmt->execute();
错误:Invalid text representation: 7 ERROR: invalid input syntax for integer: "9.5"
这是设计使然还是 postgres/pdo 不兼容?
顺便说一句,当我内联不带引号的浮点数时它会起作用:
$stmt = $con->prepare('SELECT t.* FROM my_table t WHERE t.integer_field > 9.5');
$stmt->execute();
而且 postgres 不会对 int 进行类型处理,因为我在运行这些查询时会看到不同的记录:
$con->prepare('SELECT t.* FROM my_table t WHERE t.integer_field < 5.1');
$con->prepare('SELECT t.* FROM my_table t WHERE t.integer_field < 4.9');
#given that integer_field is 5
版本:PHP 7.2.19 PostgreSQL 10.4
解决方案
过了一会儿,我弄清楚了工作查询:
$stmt = $con->prepare('SELECT t.* FROM my_table t WHERE CAST(t.integer_field AS FLOAT) > ?');
$stmt->execute([9.5]);
如果您有替代解决方案,请不要犹豫发布其他答案!
推荐阅读
- sap-gui - 系统之间的请求导入逻辑应该如何?
- html - 如何使我的 Facebook 页面插件具有响应性?
- html - 在带有固定侧边栏的滚动标题上
- nunit - Nunit3 显示来自该版本不存在的程序集的 System.AggregateException
- javascript - 动态表在 Flask 中使用时不会更新,但在其他情况下可以正常工作
- angularjs - AngularJS:如何在为缺少的属性提供默认值时避免 nonassign 错误?
- sql - 具有相邻开始-结束日期的记录过滤(在 Oracle 12 中总计 1 天)
- stata - 有条件地创建新的观察
- android - 我正在发送 JSONObject 代码=500,消息=内部服务器错误
- excel - 从文件中读取字符串时在字符串中查找上标