MySQL Query Onların Yerli Veri türü olarak Sonuçlar olsun?

3 Cevap php

I mysql_fetch_row () mysql_fetch_array () ve sayısal değerler dizeleri olarak iade ediliyor kullanarak MySQL sorgusu sonuç alma denedim. Is there any way to fetch the data as its datatype stored in the table?

Ben 1 1 tarafından bazında amaçlanan veri türü olarak değerleri döküm mümkün olacak kadar uygulama çok farklı sorgular sorgulama olacaktır.

3 Cevap

I (i.e. anything else that strings) PHP 5.2 yapılabilir kendi ana veri türleri veri alma sanmıyorum ...

PHP 5.3 'te, ben eğer doğru hatırlıyorsam, mümkün olur, size yeni (new as in PHP >= 5.3) mysqlnd (MySQL Native Driver) sürücüsü kullanırken.

PDO_MYSQLND: The new features of PDO_MYSQL in PHP 5.3 : daha benim imleri ile kazma sonra mysqlnd ilgili bu madde bulundu

Bu (alıntı) diyor ki:

Advantages of using mysqlnd for PDO

mysqlnd returns native data types when using Server-side Prepared Statements, for example an INT column is returned as an integer variable not as a string. That means fewer data conversions internally.

Ama bu sadece (PHP 5.3 sürümünüzün mysqlnd ile derlenmiş olması koşuluyla (and not the old libmysql)) PHP 5.3 ve sadece :-( hazırlanan tablolar için durum gibi görünüyor

Oldukça sizin durumunuzda, yardımcı olmuyor, sanırım ...


And here's another one, still about the new features of mysqlnd, which talks about this for not only prepared statements :
PHP: New network traffic, CPU and memory savings with mysqlnd.

Bu resmi mysqlnd sürücü içine birleştirildi emin değilim, olsa da - en iyi yolu denemek olacaktır; ama yine de hala, sadece PHP> = 5.3 olacak ...


Another solution would be to have, on the PHP-side, some kind of a mapping-system (like an ORM) to convert results coming from the DB to PHP datatypes...

Eğer tip duyarlı === ve !== gibi operatörleri, kullanmak istiyorsanız Ve evet, bu kötü ...

Ben bu manuel şekilde uyguladık. Bu, aslında sadece birkaç satır çok kötü değil.

Önerildiği gibi, sorgudan çıkan kaynak () mysqli_fetch_fields diyoruz.

Sonra MySQL veri türleri için PHP alan türü sayı bir eşleme size uygun türü içine türleri MySQLi tarafından dizeleri olarak geri döndü veritabanı geniş değerlerinizi dönüştürebilirsiniz (burada çalışkan çalışma http://www.php.net/manual/en/mysqli-result.fetch-field-direct.php bakınız) PHP.

Ben tho emin değilim ne kadar bir yavaşlama.

Ben (PDO için) bu circuvent bir işlev yazdı:

/**
 * Converts columns from strings to types according to 
 * PDOStatement::columnMeta
 * 
 * @param PDOStatement $st
 * @param array $assoc returned by PDOStatement::fetch with PDO::FETCH_ASSOC
 * @return copy of $assoc with matching type fields
 */
function convertTypes(PDOStatement $statement, $assoc)
{
    for ($i = 0; $columnMeta = $statement->getColumnMeta($i); $i++)
    {
        $type = $columnMeta['native_type'];

        switch($type)
        {
            case 'DECIMAL':
            case 'TINY':
            case 'SHORT':
            case 'LONG':
            case 'LONGLONG':
            case 'INT24':
                $assoc[$columnMeta['name']] = (int) $assoc[$columnMeta['name']];
                break;
            case 'DATETIME':
            case 'DATE':
            case 'TIMESTAMP':
                $assoc[$columnMeta['name']] = strtotime($assoc[$columnMeta['name']]);
                break;
            // default: keep as string
        }
    }

    return $assoc;
}

Tabii türü liste tam değildir ve dönüşüm basitleştirilmiş, ancak başlangıç ​​için yararlı olabilir.