日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

php mysql int string_php从mysql取出int数据,变成了string

發布時間:2024/9/19 数据库 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php mysql int string_php从mysql取出int数据,变成了string 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

php應用mysql擴展的話,不能獲取數據庫中的數據類型,而當用mysqlnd的時候,是可以獲取的。

在php7以后,mysql擴展已經摒棄了,建議用mysqli,而mysqli是可以獲取數據庫中的數據類型的,但是默認并沒有開啟。需要設置option參數 ?MYSQLI_OPT_INT_AND_FLOAT_NATIVE

為 true

$this->conn = mysqli_connect ( $this->host, $this->root, $this->password , $this->database);mysqli_options($this->conn,MYSQLI_OPT_INT_AND_FLOAT_NATIVE,true);

php手冊相關參數地址:http://php.net/manual/zh/mysqli.options.php

以下為參考資料↓↓↓↓

源地址 http://www.druidcoder.cn/2016/05/10/mysql-driver/

php與mysql交互

參考資料:

http://stackoverflow.com/questions/1197005/how-to-get-numeric-types-from-mysql-using-pdo#answer-1197041

http://zhangxugg-163-com.iteye.com/blog/1894990

http://dengxi.blog..com/4804263/1748965

http://blog.ulf-wendel.de/2008/pdo_mysqlnd-the-new-features-of-pdo_mysql/

以前一直沒注意到php從mysql取出來的數據都是string類型,無論是主鍵int id還是float。因為php是弱類型的語言,所以其實這也沒多大關系。但是這引申出php所使用的mysql驅動等問題。

首先,php是如何與mysql交互的。PHP通過某種api(其實就是擴展),基于某種驅動或lib庫與mysql server連接通信。

api有三種:mysql,mysqli和pdo。

其中mysql擴展已經不被建議使用,它將在5.5被廢棄,而在php7中被去除。

驅動有兩種:libmysqlclient(MySQL client server library )和mysqlnd(MySQL native driver )。

在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。

可以用下面兩張圖表示:

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參數,例如:

1

2

3

4

5

6

7

$mysqli = new mysqli('127.0.0.1', 'root', '', 'test');

$query = "select * from test_int";

$mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);

$result = $mysqli->query($query);

$info = $result->fetch_array();

var_dump($info);

而通過pdo,例如:

1

2

3

4

5

6

7

$pdo = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', '');

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

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

foreach ($pdo->query('select * from test_int') as $row) {

var_dump($row);

}

ATTR_EMULATE_PREPARES默認為true,需要指定;而ATTR_STRINGIFY_FETCHES默認就為false。

需要注意的是:decimal類型的數據,即使有了以上的配置,依然還是輸出為string類型。

總結

以上是生活随笔為你收集整理的php mysql int string_php从mysql取出int数据,变成了string的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。