問題描述
首先,我知道關于 SO 有各種類似的問題,例如 this 和 這個.但是,當我從表中獲取值時,整數總是作為字符串獲取.
First of all, I am aware that there are various similar questions on SO such as this and this. However, when I fetch values from a table, integers are always fetched as string.
我使用的是 PHP5.4 (5.4.16-1~dotdeb.1) 和 MYSQL5.5 (5.5.31+dfsg-0+wheezy1).這里 寫到 PHP5 默認啟用 MySQL Native Driver.4.0.但我仍然得到字符串值.
I am using PHP5.4 (5.4.16-1~dotdeb.1) and MYSQL5.5 (5.5.31+dfsg-0+wheezy1). It is written here that MySQL Native Driver is enabled by default in PHP5.4.0. But I still get string values.
我按如下方式初始化一個 PDO 對象.
I initialize a PDO object as follows.
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)
,但它們沒有任何區別.
When I insert, I tried to use execute(array(...))
format and also used bindValue(...,PDO::PARAM_INT)
, but they did not make a difference.
例如,這是我插入新行的方法.
For example, here is how I insert a new row.
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;
}
}
這是我如何從表中獲取行
Here is how I fetch rows from a table
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.
This did not occur when I tested on XAMPP for Linux 1.8.1 which uses PHP5.4.7. I currently use nginx instead of Apache.
怎么了?
推薦答案
要從帶有 PDO 的 mysql 獲取具有各自類型的整數和浮點數,您需要同時關閉基于 mysqlnd 的 PDO-mysql 和仿真模式.
To get integers and floats with respective types from mysql with PDO, you need both mysqlnd-based PDO-mysql and emulation mode turned off.
這篇關于PDO 在 PHP5.4 中以字符串形式返回整數列的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!