mysql pdoクエリ結果int結果stringになります.

4605 ワード

phpとmysqlはインタラクティブです
参考資料:
http://stackoverflow.com/questions/1197005/how-to-get-numeric-types-from-mysql-using-pdo#answer-1197041http://zhangxugg-163-com.iteye.com/blog/1894990http://dengxi.blog.51cto.com/4804263/1748965http://blog.ulf-wendel.de/2008/pdo_mysqlnd-the-new-feature s-off-pdo_mysql/
以前はphpがmysqlから取り出したデータがstringタイプであることに気づかなかったです.メインキーのidもfloatも.phpは弱いタイプの言語なので、実はこれも大丈夫です.しかし、これはphpが使用するmysqlドライバなどの問題を示しています.
まず、phpはどのようにmysqlとインタラクティブですか?PHPは何らかのアプリ(つまり拡張)を介して、何らかの駆動やlibライブラリに基づいてmysql serverと通信を接続します.
アプリには三つの種類があります.mysql、mysqli、pdo.
  mysql          ,   5.5   ,  php7    。
駆動には2つの種類があります.libmysql clientとmysqlndがあります.
 5.3  ,       libmysql. 5.3  mysqlnd     php    ,              ,             ,  :./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql=mysqlnd。
  5.4  ,  api        mysqlnd,               ,  :./configure --with-mysqli --with-pdo-mysql --with-mysql。
下記の2枚の図で表してもいいです.5.3前です.
5.3以降
もっと多いmysqlndに対して紹介して、公式のハンド・バックを参考にします.http://php.net/manual/zh/book.mysqlnd.php
古いlibmysqlを使っていたら、しょうがないです.mysqlデータが得られないタイプは、stringに変換されます.5.3からmysqlndドライバを使うと得られますが、mysqlを使うとstringに変換されます.mysqliを通したMYSQLI_OPT_INT_AND_FLOAT_NATIVEパラメータ、例えば:
$mysqli=
new mysqli
'127.1.0.1'
'root'
'
'test'
$query=
「select*from testuint」;
$mysqli->options
1)
$result=$mysqli->query($query)
$info=$relt->fetch_array();
var_dump($info)
pdoを通過します.例えば、
$pdo=
new PDO(
'mysql:host=127..1;dbname=test'は、
'root'
';
$pdo->set Attribute(PDO:ATTR HuEMULATEU UPREPARES、
false;
$pdo->setAttribute(PDO:ATTR_STRINGIF YuFETCHES、
false;
foreach($pdo->query(
'select*from testuint'
as$row){
varudump($row)
)
ATTR_EMULATEPREPARESはデフォルトでtrueです.指定が必要です.ATTR_STRINGIGHY_FETCHESのデフォルトはfalseです.
なお、デチマルタイプのデータは、以上の構成があってもstringタイプとして出力されます.
しかし、筆者は二つのパラメータを設定した後、照会結果がintになりませんでした.   (まだこの2つのpdo属性をfalseとして設定する必要があります.)
解決前後の結果を確認します.
mysql pdo查询结果 int 变成结果string 解决_第1张图片 mysql pdo查询结果 int 变成结果string 解决_第2张图片
phpinfoの比較:
変更前:
mysql pdo查询结果 int 变成结果string 解决_第3张图片 mysql pdo查询结果 int 变成结果string 解决_第4张图片
変更後:
mysql pdo查询结果 int 变成结果string 解决_第5张图片 mysql pdo查询结果 int 变成结果string 解决_第6张图片
解決方法:
PHP 5.3.0および以上のバージョンはすでにmysqlndドライバを内蔵していますので、phpをインストールする時はmysqlを事前にインストールする必要はありません.PHPをインストールしてからmysqlをインストールすることができます.
PHP 5.3.0および以上のバージョンはすでにmysqlndドライバを内蔵していますので、phpをインストールする時は前もってmysqlをインストールする必要はありません.PHPをインストールしてからmysqlをインストールすることができます. 
mysqlndはphpのオフィシャルでphpのために開発したドライバで、メモリ管理と性能の面では伝統的なlibmysqlドライバより優れています.
phpをコンパイルする時、以下のいくつかの値を指定すればいいです.
./configur--prefix=/usr/local/php\
--with-mysql=mysql
--with-mysqli=mysqlnd  --with-pdo-mysql=mysqlnd  
これです    実現しました  !!!