mysql_query dönüşünde tabloda oluşturulacak veri türünü korumak?

2 Cevap php

Hi I have a table in mysql:

CREATE TABLE user (id INT, name VARCHAR(250));

Ben sorgu tablo:

$result = mysql_query("SELECT id,name FROM user");

Ben sonuçları toplamak:

while($row = mysql_fetch_assoc($result) $rv[] = $row;

Ve ben verilerini döndürür:

echo json_encode($rv);

Sorun kimliği dizesi olarak döner ve hatta json_encode önce, int olmasıdır. I $ satır zorlamak durumunda ['id'] = (int) $ row ['id']; - Iyi çalışıyor.

Nasıl $ satırdaki doğru veri türü dönmek için mysql zorlayabilir?

10x.

2 Cevap

PDO->bindColumn can bu

$stmt = $dbh->prepare($sql);

$stmt->bindColumn('int_col', $intVar, PDO::PARAM_INT);
$stmt->bindColumn('string_col', $strVar, PDO::PARAM_STR);

$stmt->execute();

$stmt->fetch(PDO::FETCH_BOUND);

$ IntVar otomatik olarak dönüştürülür int olacak

C kütüphanesi - Ne yazık ki, PHP ile <= 5.2, MySQL işlevleri / sınıfları (yani mysql_*, mysqli_*, ve PDO) libmysql dayanmaktadır hangi MySQL sunucusu ile iletişim için destek sağlar.

Bu kütüphaneyi kullanarak fonksiyonları bile her zaman tamsayı için, dizeleri dönmek ve sütun şamandıra - ve bu konuda yapabileceği hiçbir şey yoktur: tek çözüm üzerinde, "bildiği" bazı "haritalama katmanı" (like an ORM) sahip olmaktır her sütun olmalı ve dönüşüm bazı veriler veritabanından getirilen her zaman yapacağız türü PHP tarafı.

Not: Eğer veri ekleme konum yolu DB veri getiriliyor zaman dizeleri alırsınız gerçeği hakkında bir şey değişmez.


With PHP >= 5.3, functions that communicate with a MySQL server can use mysqlnd (MySQL Native Driver) instead of libmysql -- this has to be configured at compile-time, though.

Ve belirli koşullar altında, "yerli" veri türleri ile iletişim kurabiliyor olmak, mysqlnd sağladığı güzel şeylerden birkimlikir; bu konuda ilginç bilgiler bir çift olması gereken bu makale: PHP: New network traffic, CPU and memory savings with mysqlnd.


To makes things short :

  • PHP 5.2 ile, sadece veritabanından dizeleri alırsınız; ve bazı tip-dönüşüm kendiniz yapmak zorundasınız
  • PHP 5.3 ile, yerli veritiplerini alabilirsiniz - en azından bazı durumlarda.