首先,我知道有关于SO的各种类似问题,例如this和this。但是,当我从表中获取值时,整数总是被提取为字符串。
我使用的是PHP5.4(5.4.16-1~dotdeb.1)和MYSQL5.5(5.5.31 + dfsg-0 + wheezy1)。编写here默认情况下,PHP5.4.0中启用了MySQL Native Driver。但我仍然得到字符串值。
我按如下方式初始化PDO对象。
try {
$dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=utf8';
$db = new PDO($dsn,DB_USER,DB_PASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch (PDOException $e) {
header('HTTP/1.1 500');
exit;
} catch (Exception $e) {
header('HTTP/1.1 500');
exit;
}
当我插入时,我尝试使用execute(array(...))
格式并使用bindValue(...,PDO::PARAM_INT)
,但它们没有任何区别。
例如,以下是我插入新行的方法。
public function insertList ($db,$account_id,$list_name) {
$sql = $db->prepare('INSERT INTO lists VALUES (?,?,?,?,?)');
try {
// $sql->execute(array($list_name,0,0,0,$account_id));
$sql->bindValue(1,$list_name,PDO::PARAM_STR);
$sql->bindValue(2,0,PDO::PARAM_INT);
$sql->bindValue(3,0,PDO::PARAM_INT);
$sql->bindValue(4,0,PDO::PARAM_INT);
$sql->bindValue(5,$account_id,PDO::PARAM_INT);
$sql->execute();
} catch (PDOException $e) {
header('HTTP/1.1 500');
exit;
} catch (Exception $e) {
header('HTTP/1.1 500');
exit;
}
}
以下是我从表中获取行的方法
public function fetchLists ($db,$account_id) {
$sql = $db->prepare('SELECT * FROM lists WHERE account_id=?');
try {
$sql->execute(array($account_id));
$result = $sql->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
header('HTTP/1.1 500');
exit;
} catch (Exception $e) {
header('HTTP/1.1 500');
exit;
}
return $result;
}
当我在使用PHP5.4.7的XAMPP for Linux 1.8.1上进行测试时,没有发生这种情况。我目前使用的是nginx而不是Apache。
有什么问题?
答案 0 :(得分:2)
要从带有PDO的mysql获取各自类型的整数和浮点数,您需要关闭基于mysqlnd的PDO-mysql和仿真模式。