【问题标题】:PHP PDO PostgreSQL Could Not Determine Data TypePHP PDO PostgreSQL 无法确定数据类型
【发布时间】:2021-03-14 05:04:21
【问题描述】:

在将 PHP PDO 与 PostgreSQL 一起用于特定查询时,我遇到了一个奇怪的错误,我不明白为什么。

我有以下代码

$conn = new PDO($db, $us, $pw);

try {
   $count = $conn->prepare("select count(idno) as count from t_dummy where ( ? is null or idno = ? )");
   $count->execute([null, null]);
   $count_fetch = $count->fetch();
} catch(Exception $error) {
   echo $error;
}

var_dump($count_fetch[0]);

如果 PDO 连接到 MySQL 数据库,那么它可以正常工作,但是当连接到 PostgreSQL 数据库时,它会失败并出现以下错误

could not determine data type of parameter $1

看起来它不喜欢为? is null 使用参数,但我不知道为什么,因为这是在 PgAdmin 中正常工作的有效 PostgreSQL 语法

【问题讨论】:

  • ? is null 的意义何在?你希望它做什么?
  • 这是一种处理空id的方法,如果id参数为null则第一个条件为真,并且计算所有记录,如果id不为空则第二个条件为真与身份证号匹配的记录
  • 在查询中使用 CAST(),例如:CAST(? AS integer) IS NULL
  • 谢谢@FrankHeikens,这正是我所需要的,您能否发布一个答案以便我接受?

标签: php postgresql pdo prepared-statement


【解决方案1】:

使用 CAST():

$conn = new PDO($db, $us, $pw);

try {
   $count = $conn->prepare("SELECT COUNT(idno) AS count FROM t_dummy WHERE ( CAST(? AS integer) IS NULL OR idno = ? );");
   $count->execute([null, null]);
   $count_fetch = $count->fetch();
} catch(Exception $error) {
   echo $error;
}

var_dump($count_fetch[0]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2021-11-20
    • 2017-10-29
    • 1970-01-01
    • 2013-06-19
    • 2013-03-30
    • 1970-01-01
    相关资源
    最近更新 更多