在我的表格中,我有一个专栏corder
,该专栏是int(3)
。
使用PDO
我运行以下内容:
$maxCorder = "SELECT MAX(`corder`) FROM cats WHERE `user` = :uid AND `cparent` = :cp";
$database->query($maxCorder);
$database->bind(':uid', $_SESSION['userid']);
$database->bind(':cp', $catID);
$maxCorderResult = $database->single();
并发现如果我回显$maxCorderResult
,它就是列的正确最大值。我想为它添加1,所以将其转换为int:
$maxCorderResult = (int)$database->single();
并且发现$maxCorderResult
现在是int
为1.这同样适用于(float)
。我不知道我哪里出错了。研究它似乎只找到一个不相关的问题,其中数字很大,要转换为整数并产生不可预测的结果。对于此测试,我只有4行,corder
为0,1,2和3.我已手动将这些行更改为各种整数,并且会发生相同的结果。
我使用自定义PDO类详细here。 single()
方法在类中调用以下函数:
public function single(){
$this->execute();
return $this->stmt->fetch(PDO::FETCH_ASSOC);
}
正如一些人所指出的那样,我愚蠢地忽略了对我正在使用的PDO
课程实际上正在回归的基本熟悉程度。这是一个array
,而不是int
或string
,在尝试将其直接投放到int
时,它总会严重下降。
我希望我的教训不是因为分心,比如我想要的结果,直到转换点(仍然不理解我是怎么做的),并且三重检查&#39 ; s在文档中返回。
答案 0 :(得分:3)
从the manual开始:
PDOStatement::fetch
- 从结果集中获取下一个行
fetch_style
控制下一行将如何返回给调用者。这个值 必须是PDO :: FETCH_ *常量之一,默认值为 PDO :: ATTR_DEFAULT_FETCH_MODE(默认为PDO :: FETCH_BOTH)。
PDO::FETCH_ASSOC
:返回按列名索引的数组 在结果集中返回返回值
此函数的成功返回值取决于获取 类型。在所有情况下,失败时都会返回FALSE。
将数组转换为int没有任何意义。
答案 1 :(得分:1)
我真的不明白为什么有人会使用这样一个自制的代理人如果使用香草PDO可以做得更简单:
$sql = "SELECT MAX(`corder`) FROM cats WHERE `user` = ? AND `cparent` = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$_SESSION['userid'], $catID]);
$maxCorderResult = $stmt->fetchColumn();