我正在使用PDO和MySQL,出于某种原因,当从数据库获取int类型的值时,PDOStatement返回数字的字符串表示而不是数字类型的值.我该如何防止这种情况发生?
我注意到有一个PDO类的属性:PDO::ATTR_STRINGIFY_FETCHES应该处理这个,但是,当试图修改它时,它会抛出一个错误,说该属性对MySQL驱动程序无效.
在咨询数据库时获取字符串而不是数字是否正常?
我正在将我的PHP代码从mysql(在5.5中弃用)迁移到PDO_MySQL.但是,mysql_fetch_row返回整数,同时PDOStatement::fetch返回数字的字符串.如何让PDO像前者一样?
结果mysql_fetch_row:
array(1) {
["id"]=>
int(1)
}
Run Code Online (Sandbox Code Playgroud)
结果PDOStatement::fetch:
array(1) {
["id"]=>
string(1) "1"
}
Run Code Online (Sandbox Code Playgroud) 我在用
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)
得到我桌子的所有行.
模式定义为"id INTEGER PRIMARY KEY,title TEXT,year INTEGER,price REAL"
来自fetchAll结果的一行是
array(4) {
[0]=>
string(1) "1"
[1]=>
string(14) "The Dark Night"
[2]=>
string(4) "2008"
[3]=>
string(5) "19.95"
}
Run Code Online (Sandbox Code Playgroud)
为什么所有数据类型都以字符串形式返回?我希望它们按照架构中的定义返回.我理解SQLite的"无类型"特性,但它们确实将有限的数据类型定义为TEXT,INTEGER和REAL.如何使用指定的数据类型返回数据?我不想遍历每一行,并用PHP转换它 - 这似乎太慢了.
完整的测试代码如下:
<?
class sqlite_test {
function __construct()
{
$this->dbase_filename = "test.sqlite";
$this->init_dbase();
}
function init_dbase()
{
$this->pdo = new PDO("sqlite:".$this->dbase_filename);
}
function open_table()
{
$table = "dvds";
if ( ! ($test_to_see_if_table_exists = $this->pdo->query("SELECT 1 from $table")) ) {
$schema = "id INTEGER PRIMARY KEY, title TEXT, year …Run Code Online (Sandbox Code Playgroud)