gpt4 book ai didi

PHP PDO lastInsertId 返回字符串而不是整数

转载 作者:行者123 更新时间:2023-11-29 01:05:05 26 4
gpt4 key购买 nike

我目前正在构建一个 symfony/doctrine 应用程序,其中一个模型具有以下结构:

Session:
columns:
session_id:
type: integer(8)
primary: true
autoincrement: true
session_number:
type: string(30)

这正确映射到数据库为:

CREATE TABLE `session` (
`session_id` bigint(20) NOT NULL AUTO_INCREMENT,
`session_number` varchar(30) NOT NULL,

所以我们在那里很安全。

然后在尝试创建新记录时,代码如下:

$newSession = new Session();
$newSession->session_number = session_id();
$newSession->save();
//...
echo $newSession->session_id; //<------ this will return a string '1'

最后一行是有问题的。 session_id 字段用最后一个标识值填充,但作为字符串!!

所以起初,我认为 doctrine 是罪魁祸首,但后来调试代码,我发现 PDO 似乎实际上是将值作为字符串返回的那个。被调用的方法是:

dbh->lastInsertId()

所以显而易见的问题是:我该如何解决这个问题?。我在互联网上找到了这些东西,但还没有尝试过:

  1. PDO::ATTR_STRINGIFY_FETCHES。这行得通吗?如果是,我该如何配置?
  2. 使用 mysql native 驱动程序而不是 pdo。但是 Doctrine 会处理它,所以我不确定我是否可以配置它。
  3. 另一个明显的解决方法是类型转换为 int :(int)$session->session_id。但这很丑陋,因为它应该返回一个整数值(这就是使用 pdo 和 Doctrine 的全部目的!)并且所有其他模型都会有同样的问题。
  4. 最好的解决方案是什么?

最佳答案

您可能需要使用转换函数 see php manual .

$myInteger = intval($myString)

为了在字符串表示的数字太大而无法转换为整数时发送异常(并避免代码中出现一些令人讨厌的间歇性错误),请用以下代码包围:

$myInteger = intval($myString)
if ($myInteger === PHP_INT_MAX) { // PHP 4.4.0 & 5.0.5 min
throw new Exception('Integer out of range, please call your developer for bug fixing!')
}

关于PHP PDO lastInsertId 返回字符串而不是整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4103475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com