我正在尝试使用PDO
从MySQL数据库获取数据,但不幸的是PDO
将结果作为字符串数组返回。我想将原生MySQL数据类型保留在结果数组中。
我尝试将PDO::ATTR_DEFAULT_FETCH_MODE
同时设置为PDO::FETCH_ASSOC
和PDO::FETCH_OBJ
,但它仍然将INT
数据作为字符串返回。
以下是转储的结果:
array (size=1)
0 =>
object(stdClass)[27]
public 'id' => string '3' (length=1)
public 'avatar' => string '' (length=0)
public 'fullName' => string 'Mikheil Janiashvili' (length=19)
public 'email' => string 'xxxxx@yyyyy.com' (length=17)
public 'phone' => string '23 3537 20 03544' (length=12)
public 'educationGE' => string '' (length=0)
public 'educationEN' => string '' (length=0)
public 'educationRU' => string '' (length=0)
public 'experienceGE' => string '' (length=0)
public 'experienceEN' => string '' (length=0)
public 'experienceRU' => string '' (length=0)
public 'descriptionGE' => string '' (length=0)
public 'descriptionEN' => string '' (length=0)
public 'descriptionRU' => string '' (length=0)
答案 0 :(得分:2)
当您实例化PDO对象时,需要告诉它使用MySQL的本机准备查询:
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
假设您正在使用PHP> = 5.3,您将使用mysqlnd库,它可以从准备好的查询中返回正确的数据类型。
示例:
$ php -a
Interactive shell
php > $db = PDO("mysql:host=localhost;dbname=test", "test", "");
php > $res = $db->query("SELECT 1, PI()");
php > var_dump($res->fetch());
array(4) {
[1]=>
string(1) "1"
[2]=>
string(1) "1"
["PI()"]=>
string(8) "3.141593"
[3]=>
string(8) "3.141593"
}
php > $db = PDO("mysql:host=localhost;dbname=test", "test", "", [PDO::ATTR_EMULATE_PREPARES=>false]);
php > $res = $db->query("SELECT 1, PI()");
php > var_dump($res->fetch());
array(4) {
[1]=>
int(1)
[2]=>
int(1)
["PI()"]=>
float(3.1415926535898)
[3]=>
float(3.1415926535898)
}
php >