欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PDOStatement::setFetchMode()问题

程序员文章站 2022-05-25 14:58:37
...
function fetch($query='', $type = 'BOTH') 
{
    $result_type="PDO::FETCH_".$type;
    $query->setFetchMode($result_type);//这报错,$query是pdo的query结果
    $result_arr=$query->fetch();
    return $result_arr;
}

PDOStatement::setFetchMode(): SQLSTATE[HY000]: General error: mode must be an integer
这个是什么问题?本地测试没问题,放空间报错

回复内容:

function fetch($query='', $type = 'BOTH') 
{
    $result_type="PDO::FETCH_".$type;
    $query->setFetchMode($result_type);//这报错,$query是pdo的query结果
    $result_arr=$query->fetch();
    return $result_arr;
}

PDOStatement::setFetchMode(): SQLSTATE[HY000]: General error: mode must be an integer
这个是什么问题?本地测试没问题,放空间报错

no code, no truth.

你得把代码和数据库从你的项目中抽出来并尽量简化,以便于其它人在自己的电脑上重现你遇到的问题,再来分析。

PDO扩展在Windows环境和Linux环境的行为不相同,有的代码在Windows环境是不报错的(warning、notice全打开也不报),但在linux环境就会报错的,我7年前遇到过。


改一行代码:

$query->setFetchMode(constant($result_type));

PDOStatement::setFetchMode方法必须传入第一个int型的mode参数啊,你肯定没传或者传的不是int型的。至于本地测试没报错,可能是service的错误输出级别跟空间的不一样。

PDOStatement::setFetchMode ( int $mode );

//mode
//The fetch mode must be one of the PDO::FETCH_* constants.

一个更好的方法,有图有真相:

PDOStatement::setFetchMode()问题

你理解错文档的意思了,那是要你填一个PDO的常量,不是字符串。

相关标签: php