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.
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.
Untuk menukar daripada pemacu MySQL asli kepada mysqlnd pada Ubuntu, ikut langkah berikut:
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 $
Pastikan bahawa atribut PDO berikut ditetapkan dengan betul:
Setelah tetapan ini dikonfigurasikan, MySQL akan mengembalikan jenis angka sebagai berikut:
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!