PHP(int)将MySQL MAX结果转换为1,无论数字是多少

时间:2017-04-24 23:12:17

标签: php mysql

在我的表格中,我有一个专栏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类详细heresingle()方法在类中调用以下函数:

public function single(){
    $this->execute();
    return $this->stmt->fetch(PDO::FETCH_ASSOC);
}

更新

正如一些人所指出的那样,我愚蠢地忽略了对我正在使用的PDO课程实际上正在回归的基本熟悉程度。这是一个array,而不是intstring,在尝试将其直接投放到int时,它总会严重下降。

我希望我的教训不是因为分心,比如我想要的结果,直到转换点(仍然不理解我是怎么做的),并且三重检查&#39 ; s在文档中返回。

2 个答案:

答案 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();