yii2 從資料庫獲取內容值型別與資料庫欄位型別問題解決

雪花飄發表於2019-07-20

之前使用 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 協議》,轉載必須註明作者和本文連結

雪花飄

相關文章