之前使用 yii2 時查詢資料庫內容時直接用的 框架自帶的 ActiveRecord(簡稱AR),可以很好的處理整型和字串型別的問題,比如如果資料庫欄位是整型的,取出來的資料就是整型的,其它就是字串型別了,只有正確處理這個問題,前端處理數值才好處理,因為前端vue使用eslint,值比較是全等型比較的。
最近使用的一個專案沒有使用AR,而是封裝的 Query 來取資料,但是發現取出來的資料都是字串型別,這是很不合理的,度娘了一下,發現在資料庫連線那裡配置一下就可以很容易的解決問題 了。
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=xxx;dbname=xxx',
'username' => 'root',
'password' => '123456',
'charset' => 'utf8',
'tablePrefix' => 'yii_',
'attributes' => [
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,
]
];
主要是加這一塊
'attributes' => [
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,
]
這些處理都是PDO這裡處理的,附上相關解析:
array(
// 強制 PDO 獲取的表欄位字元的大小寫轉換,或原樣使用列資訊
PDO::ATTR_CASE => PDO::CASE_LOWER,
// 執行出錯時丟擲異常
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
// 將返回的空字串轉換為 SQL 的 NULL
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
// 返回資料的時候不將數值轉換為字串
PDO::ATTR_STRINGIFY_FETCHES => false,
// 設定為false禁止PDO模擬預處理語句,而使用真正的預處理語句,即有MySQL執行預處理語句
PDO::ATTR_EMULATE_PREPARES => false,
));
本作品採用《CC 協議》,轉載必須註明作者和本文連結