【问题标题】:php pdo informix returns data as string or NULLphp pdo informix 以字符串或 NULL 形式返回数据
【发布时间】:2020-05-15 07:50:58
【问题描述】:

来自 Informix 的 PDO Informix 数据始终以字符串形式返回,只有 NULL 以 NULL 形式返回。

我试过玩

$pdo_conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo_conn->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

没有成功。另外,当我尝试时

$pdo_conn->getAttribute(PDO::ATTR_STRINGIFY_FETCHES);

我收到 PHP 致命错误:未捕获的 PDOException:SQLSTATE[IM001]:驱动程序不支持此功能:驱动程序不支持该属性

我用

  $prep = $pdo_conn->prepare($query);
  $prep->execute();
  $result = $prep->fetchAll(PDO::FETCH_ASSOC);

有人知道如何使用 pdo informix 将我的浮点数作为浮点数吗?

谢谢, 阿里。

【问题讨论】:

  • 这是 100% 驱动程序特定的。如果驱动程序不支持它,那么您就不走运了。 (我从来没有使用过 Informix,所以我不知道是不是这样。)

标签: php pdo informix


【解决方案1】:

Informix PDO 驱动程序以 PDO_PARAM_STR 形式返回所有内容(以 PDO_PARAM_LOB 形式返回的 CLOB 除外)。

与 PDO_ODBC 相同,对于结果集中的每一列,驱动程序使用 SQL_C_CHAR 进行内部 SQLBindCol ODBC 调用。

ATTR_STRINGIFY_FETCHES 属性的值没有区别,因为返回的数据类型已经是字符串。 您可以查看驱动程序源代码(大约第 653 行):

https://github.com/php/pecl-database-pdo_informix/blob/master/informix_statement.c

【讨论】:

  • 感谢您的回答。知道他们为什么要这样做吗?如果所有内容都作为字符串返回,那么浮点数和整数有什么用我想知道......即使浮点数中的点也没有返回,它是一串没有点的数字。这很没用?
  • 我想将所有内容作为字符串返回并让应用程序在需要时进行转换会更简单。请记住,Informix(和其他数据库)中有很多数据类型,而 PHP 中可能根本不存在。大多数情况下,所有内容都可以写成字符串(包括小数)。我尝试了一个简单的select 1.123456789::float from... 并得到1.123456789 返回
  • 在尝试了您的建议后,我得出的结论是它与 DB_LOCALE 和 CLIENT_LOCALE 有关。当我将 squirrel SQL(jdbc 驱动程序)与DB_LOCALE=en_us.1252;CLIENT_LOCALE=en_us.1252@dict; 一起使用时,它会为浮点返回一个逗号,这在比利时很正常。知道如何使用 CLIENT_LOCALE 将其作为点返回吗?与此同时,我正在寻找答案......
  • 这很正常(我的意思是,这是我以前看到的区域设置不正确的情况)。句点 (.) 被视为千位分隔符而不是小数点,这就是为什么您除了数字之外什么都看不到。 CLIENT_LOCALE/DB_LOCALE 的第一部分设置您的区域设置。 en_US 表示美国境内的英语(使用句点和逗号表示十进制/千位)。尝试将 CLIENT_LOCALE 设置为 nl_be.1252,它可能会起作用。
  • 我解决了这个问题,我应该看起来更好。也就是说:我们显然有很多带有浮点列的表,它们不用于存储浮点数,它们只包含整数。 Ints > 999 以逗号形式出现,这就是为什么我错误地认为浮点数以逗号形式出现。所以,jsagrera,你的回答仍然很有帮助:现在我更了解 pdo_informix 的行为。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多