PDO kullanarak mysql sayısal türleri almak için nasıl

4 Cevap php

Ben int tip DB değerleri alma, PDOStatement sayısal türdeki değer sayının bir dize temsilini dönen ve değilken nedense, PDO ve mysql kullanıyorum, nasıl oluyor bu engellerim?

Bu dikkat çekmek gerekiyordu ama bunu değiştirmeye çalışırken, bu özellik mysql sürücü için geçerli değil diyerek bir hata atar PDO :: ATTR_STRINGIFY_FETCHES: Ben PDO sınıfının bir niteliği olduğunu fark ettim.

Bir db danışmanlık Sayı yerine dizeleri almak için normal mi?

4 Cevap

Önce son soruyu yanıtlamak için, "evet," ne yazık ki bu dizeleri gibi sayıları almak normaldir. Pascal aktardığı manuel diyor, mysqlnd (PHP 5.3) PDO gelen hazır deyimi öykünmesi kapatmak kaydıyla, hazırlanmış tablolardan yerel veri türlerini döner gibi.

new PDO($dsn, $user, $pass, array(
	PDO::ATTR_EMULATE_PREPARES => false
))

PDO :: ATTR_STRINGIFY_FETCHES MySQL ilgisi yoktur.

Eğer parlak tarafına bakarsanız, zaten hazırlanmış ifadeler kullanmak iyi bir uygulama, yani ... ;)

Pascal's answer doğrudur. Ben biraz sorun tüm iş yapmak vardı. İşte yapmanız gerekenler.

İlk olarak, mysqlnd kurulu ve etkin olduğundan emin olun. php --info bak. Pdo_mysql bölümünde, gibi görünmelidir:

pdo_mysql

PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.8-dev - 20102224 - $Revision: 321

Yerine istemci API sürümü mysqlnd görme, sizin gibi bir satır görürseniz ...

Client API version => 5.5.29

... Sonra mysqlnd yüklü ve gidiş yok. Önce o ilgilenir.

İkincisi, PDO taklit hazırlanmış deyimleri by default for all MySQL bağlantılarını kullanır. Gülünç, ama orada olduğunu. Ve sen (şimdi here olan bağlantılı blog yazısı "sunucu tarafı hazırlanan tablolar" denir) gerçek hazırlanmış deyimleri kullanmak yalnızca yerel veri türlerini alacak. Yani senin gibi, false PDO :: ATTR_EMULATE_PREPARES ayarlamanız gerekir:

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Son olarak, true PDO :: ATTR_STRINGIFY_FETCHES set değil emin olun.

$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

Eğer MySQL türü sistem bahsediyorsan eğer, ben size PDOStatement-> bindValue () fonksiyonuna bir göz atmak istiyorum düşünüyorum. http://us2.php.net/manual/en/pdostatement.bindparam.php#pdostatement.bindparam.examples: Bu çağrı açık bir veri türü kabul isteğe bağlı üçüncü bir parametre