Untuk menjawab pertanyaan terakhir Anda terlebih dahulu, "ya", sayangnya menerima angka sebagai string adalah hal yang normal. Seperti yang dikatakan oleh manual yang dikutip oleh Pascal, mysqlnd (PHP 5.3) akan mengembalikan tipe data asli dari pernyataan yang disiapkan, asalkan Anda mematikan emulasi pernyataan yang disiapkan dari PDO.
new PDO($dsn, $user, $pass, array(
PDO::ATTR_EMULATE_PREPARES => false
))
PDO::ATTR_STRINGIFY_FETCHES tidak terkait dengan MySQL.
Jika Anda melihat sisi baiknya, itu adalah praktik yang baik untuk menggunakan pernyataan yang sudah disiapkan, jadi...;)