ฉันเคยเห็นคำถามนี้ซ้ำสองสามครั้งใน Stack Overflow แต่ไม่มีการสำรวจปัญหาอย่างเพียงพอ (หรืออย่างน้อยก็ในทางที่เป็นประโยชน์สำหรับฉัน)
ปัญหาคือแบบสอบถาม DB ควรส่งคืนชนิดข้อมูลจำนวนเต็มใน PHP สำหรับคอลัมน์จำนวนเต็ม แต่แบบสอบถามจะส่งกลับทุกคอลัมน์เป็นประเภทสตริง
ฉันมั่นใจว่า "PDO :: ATTR_STRINGIFY_FETCHES" หากเป็นเท็จเพื่อให้แน่ใจว่าผลลัพธ์จะไม่ถูกส่งไปยังสตริง
คำตอบที่ฉันเคยเห็น:
- มันไม่สามารถทำได้
- ไม่ทำงานบน MacOS X ที่ติดตั้ง PHP / MySQL
- พิมพ์ cast ค่าทั้งหมดของคุณในโค้ดของคุณ
- ไม่ฉันจะไม่ทำอย่างนั้น
- ไม่ต้องกังวลไปเพราะ PHP พิมพ์แบบหลวม ๆ
- ข้อมูลของฉันถูกส่งออกเป็น JSON และถูกใช้โดยบริการอื่น ๆ จำนวนมากบางส่วนต้องการข้อมูลในรูปแบบที่ถูกต้อง
จากการวิจัยของฉันฉันเข้าใจว่านี่เป็นปัญหาการใช้งานไดรเวอร์
แหล่งข้อมูลหลายแห่งอ้างว่าไดรเวอร์ MySQL เนทีฟไม่รองรับการส่งคืนประเภทตัวเลข สิ่งนี้ดูเหมือนจะไม่เป็นความจริงเนื่องจากทำงานบน Mac OS X เว้นแต่พวกเขาจะบอกว่า "ไดรเวอร์ MySQL เนทีฟบนLinuxไม่รองรับคุณสมบัตินี้"
นี่หมายความว่ามีบางอย่างพิเศษเกี่ยวกับไดรเวอร์ / สภาพแวดล้อมที่ฉันติดตั้งบน Mac OS X ฉันพยายามระบุความแตกต่างเพื่อใช้การแก้ไข แต่ฉันถูก จำกัด ด้วยความรู้เกี่ยวกับวิธีตรวจสอบสิ่งเหล่านี้
ความแตกต่าง:
- PHP บน OS X ถูกคอมไพล์และติดตั้งผ่าน Home Brew
- PHP บน Ubuntu ถูกติดตั้งผ่าน "apt-get install php5-dev"
- PHP บน OS X กำลังเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ที่ทำงานบน OS X
- เวอร์ชันเซิร์ฟเวอร์: 5.1.71-log Source distribution
- PHP บน Ubuntu กำลังเชื่อมต่อกับฐานข้อมูล Rackspace Cloud
- เวอร์ชันเซิร์ฟเวอร์: 5.1.66-0 + บีบ 1 (Debian)
สภาพแวดล้อมของ Ubuntu
- เวอร์ชัน: 10.04.1.2
- PHP 5.4.21-1 + debphp.org ~ lucid + 1 (cli) (สร้าง: 21 ต.ค. 2556 08:14:37 น.)
php -i
pdo_mysql
ไดร์เวอร์ PDO สำหรับ MySQL => เวอร์ชัน Client API ที่เปิดใช้งาน => 5.1.72
สภาพแวดล้อม Mac OS X
- 10.7.5
- PHP 5.4.16 (cli) (สร้าง: 22 สิงหาคม 2556 09:05:58 น.)
php -i
pdo_mysql
ไดร์เวอร์ PDO สำหรับ MySQL => เวอร์ชัน Client API ที่เปิดใช้งาน => mysqlnd 5.0.10 - 20111026 - $ Id: e707c415db32080b3752b232487a435ee0372157 $
ใช้แฟล็ก PDO
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,
ความช่วยเหลือและความเชี่ยวชาญใด ๆ จะได้รับการชื่นชม :) ฉันจะโพสต์กลับที่นี่อย่างแน่นอนหากพบคำตอบ