Mengapa lajur angka MySQL dikembalikan sebagai rentetan dalam PHP, dan bagaimana saya boleh memastikan ia dikembalikan sebagai integer atau terapung?

Susan Sarandon
Lepaskan: 2024-11-24 11:21:14
asal
511 orang telah melayarinya

Why are MySQL numeric columns returned as strings in PHP, and how can I ensure they are returned as integers or floats?

Cara Mengembalikan Integer dan Lajur Angka daripada MySQL sebagai Integer PHP dan Angka

Pernyataan Masalah

Sesetengah aplikasi berasaskan PHP mungkin menghadapi masalah di mana hasil daripada pertanyaan MySQL dikembalikan sebagai rentetan dan bukannya sebagai jenis data integer atau angka yang betul. Ini berlaku walaupun menetapkan atribut PDO PDO::ATTR_STRINGIFY_FETCHES kepada palsu untuk mengelakkan penghantaran rentetan.

Pertimbangan Pemacu

Adalah penting untuk ambil perhatian bahawa pemacu MySQL memainkan peranan penting dalam menentukan sama ada jenis angka dikembalikan sebagai integer atau angka. Sesetengah pemacu, seperti pemacu asli MySQL di Linux, tidak menyokong sepenuhnya ciri ini.

Walau bagaimanapun, pemacu mysqlnd, yang tersedia untuk pengedaran Linux melalui repositori pihak ketiga, tidak menyokong keupayaan ini. Memastikan pemacu mysqlnd digunakan dalam persekitaran PHP anda adalah penting.

Memasang Pemacu mysqlnd pada Ubuntu

Untuk menukar daripada pemacu MySQL asli kepada mysqlnd pada Ubuntu, ikut langkah berikut:

  1. Nyahpasang pemacu asli: apt-get remove php5-mysql
  2. Pasang mysqlnd pemacu: apt-get install php5-mysqlnd
  3. Mulakan semula Apache: service apache2 restart

Verifying Driver Penggunaan

Selepas dipasang mysqlnd, sahkan bahawa ia sedang digunakan dengan menjalankan php -i. Cari entri berikut dalam bahagian pdo_mysql:

PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
Salin selepas log masuk

Tetapan PDO

Pastikan bahawa atribut PDO berikut ditetapkan dengan betul:

  • PDO::ATTR_STRINGIFY_FETCHES : Tetapkan kepada palsu untuk mengelakkan rentetan penghantaran.
  • PDO::ATTR_EMULATE_PREPARES: Tetapkan kepada palsu untuk meningkatkan prestasi.

Jenis Nilai Dipulangkan

Setelah tetapan ini dikonfigurasikan, MySQL akan mengembalikan jenis angka sebagai berikut:

  • Jenis titik terapung (Apung, DOUBLE) apabila PHP terapung
  • Jenis integer (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT) sebagai integer PHP
  • Jenis Titik Tetap (PERPULUHAN, NUMERIC) sebagai rentetan (bigints dengan nilai melebihi 64 bit juga boleh kembali sebagai strings)

Sebagai contoh, kod PHP berikut akan mengeluarkan jenis data yang dijangkakan:

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

$stmt = $pdo->prepare("SELECT * FROM table");
$stmt->execute();

$row = $stmt->fetch(PDO::FETCH_OBJ);

echo "<pre class="brush:php;toolbar:false">";
print_r($row);
echo "
";
Salin selepas log masuk

Output:

object(stdClass)[915]
  public 'integer_col' => int 1
  public 'double_col' => float 1.55
  public 'float_col' => float 1.5
  public 'decimal_col' => string '1.20' (length=4)
  public 'bigint_col' => string '18446744073709551615' (length=20)
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa lajur angka MySQL dikembalikan sebagai rentetan dalam PHP, dan bagaimana saya boleh memastikan ia dikembalikan sebagai integer atau terapung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan