Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa lajur angka MySQL dikembalikan sebagai rentetan dalam PHP, dan bagaimana saya boleh memastikan ia dikembalikan sebagai integer atau terapung?

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

Susan Sarandon
Susan Sarandonasal
2024-11-24 11:21:14507semak imbas

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 $

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 "
";

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)

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!

Kenyataan:
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