Je trouve très gênant et difficile de comprendre que le comportement par défaut de la db-interface de Wordpress est de convertir tous les types entiers (et float?) En chaînes.
par exemple
$wp_posts = $wpdb->get_results('SELECT * from wp_posts');
$unexpected_type = gettype($wp_posts[0]->ID) == 'string';
S'il vous plaît, confirmez que je pense que cela est fait afin de prendre en charge des types entiers très volumineux (volumineux) qui ne sont pas pris en charge par PHP, ou fournissez une autre explication de la raison pour laquelle vous choisissez de convertir des entiers en chaînes.
Comme on pouvait s'y attendre, la deuxième partie de ma question consiste à déterminer s'il existe un paramètre de configuration intégré dans la classe wpdb
qui permettrait de demander integers pour des enregistrements de type entier.
Parce que la bibliothèque d'interface MySQL utilisée avant PHP 5.3 renvoie tout sous forme de chaînes. La nouvelle interface (facultative), le pilote natif MySQL, peut renvoyer des types entiers si elle est activée au moment de la compilation.
Pour plus de détails, regardez libmysql et mysqlnd.
Comme les autres messieurs l'ont mentionné dans les commentaires, les chaînes sont renvoyées en raison des bibliothèques utilisées par la source. Si vous devez convertir un entier en appel de fonction ou de comparaison, utilisez simplement la fonction absint
de WordPress.
$int_id = absint( $wp_posts[0]->ID );
En outre, vous ne savez pas si votre appel à la base de données est simplement un exemple, mais je suggère d’utiliser get_posts
, ou mieux, un WP_Query
si possible. Cela vous permet de conserver toute la désinfection intégrée à ces fonctions, tout en maintenant la sécurité de votre site. Pensez également à utiliser wp_reset_query
après avoir utilisé les méthodes ci-dessus pour vous assurer que vous revenez à la boucle principale.
Si vous utilisez Ubuntu:
Sudo apt-get remove php5-mysql
Sudo apt-get install php5-mysqlnd
Sudo service Apache2 restart