mysql pdoクエリ結果int結果stringになります.
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.
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として設定する必要があります.)
解決前後の結果を確認します.
phpinfoの比較:
変更前:
変更後:
解決方法:
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
これです 実現しました !!!
参考資料:
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として設定する必要があります.)
解決前後の結果を確認します.
phpinfoの比較:
変更前:
変更後:
解決方法:
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
これです 実現しました !!!