0

mysqlのネイティブ型列を保持するpdo-mysqlからデータを取得するにはどうすればよいですか?

例: テーブルからデータを取得します。このテーブルには、整数列である id 列が含まれています。このテーブルからデータを取得すると、php の結果配列には、整数ではなく文字列のような id フィールドがあります。

array(3) { ["id"]=> string(2) "11" 
           ["name"]=> string(24) "test name"           
           ["surname"]=> string(2) "test suname"
          }

mysqlnd ドライバーを使用すると、これを php のデフォルトの型として取得できることがわかっています。

私はphp 5.3を使用し、mysqlndは有効になっています:

shell$ php -i | grep -i mysql     

MySQL Support => enabled
Client API version => mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $
mysql.allow_local_infile => On => On
mysql.allow_persistent => On => On
mysql.connect_timeout => 60 => 60
mysql.default_host => no value => no value
mysql.default_password => no value => no value
mysql.default_port => 3306 => 3306
mysql.default_socket => /var/mysql/mysql.sock => /var/mysql/mysql.sock
mysql.default_user => no value => no value
mysql.max_links => Unlimited => Unlimited
mysql.max_persistent => Unlimited => Unlimited
mysql.trace_mode => Off => Off
mysqli
MysqlI Support => enabled
Client API library version => mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $
mysqli.allow_local_infile => On => On
mysqli.allow_persistent => On => On
mysqli.default_host => no value => no value
mysqli.default_port => 3306 => 3306
mysqli.default_pw => no value => no value
mysqli.default_socket => /var/mysql/mysql.sock => /var/mysql/mysql.sock
mysqli.default_user => no value => no value
mysqli.max_links => Unlimited => Unlimited
mysqli.max_persistent => Unlimited => Unlimited
mysqli.reconnect => Off => Off
mysqlnd
mysqlnd => enabled
Version => mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $
PDO drivers => mysql, sqlite, sqlite2
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $
pdo_mysql.default_socket => /var/mysql/mysql.sock => /var/mysql/mysql.sock

ネイティブ型でデータを取得するにはどうすればよいですか?

4

2 に答える 2

4

理論的にはこれを数値で制御するパラメーターがありPDO::ATTR_STRINGIFY_FETCHESます (私の知る限り、MySQL ドライバーで日付を含むネイティブ オブジェクトを取得する方法はありません)。

PDO::ATTR_STRINGIFY_FETCHES: フェッチ時に数値を文字列に変換します。ブール値が必要です。

PDO::setAttribute()で変更できます。ただし、ドライバーは常に特定の PDO 機能を自由に実装でき、MySQL のものはこれをサポートしていないようです。

一部のユーザーは、文字列化されたフェッチがエミュレートされたパラメーター モードでクエリを実行することの副作用であると報告しているため、いつでも無効にできます。

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

このようなモードを有効/無効にすると、次のような追加の副作用があることに注意してください。

  • 名前付きパラメーターを複数回使用できない
  • 引用符で囲まれた数値パラメーターを取得する (特に、LIMIT句を壊す)
于 2012-04-11T10:15:43.483 に答える
0

PHP は型付けが弱く、DB またはリクエストからのすべての入力は文字列になります。必要に応じて PHP 関数を使用してキャストするだけ(int)ですが、型をジャグリングすることでこの必要を回避できます。

于 2012-04-11T10:11:24.930 に答える