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

歡迎訪問 生活随笔!

生活随笔

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

数据库

php mysql int string_mysql查出的 int 型字段都是 string

發布時間:2024/4/11 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php mysql int string_mysql查出的 int 型字段都是 string 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

坑點and埋坑點 - mysql查出的int型字段都是string ?

作者:KK

發表日期:2016.10.12

用mysql擴展從數據庫里查出來的數據,int型字段都是string類型 ?

這導致嚴格的數值運算可能受到影響,轉換成JSON輸出給前端的全是string,JS用加法運算符計算時都成了字符串拼接

因此JS老是要麻煩地先parseInt,更麻煩的是這幾年移動端興起,PHP又要把數據傳給客戶端比如JAVA這些語言進行計算

于是這些語言對變量類型比較敏感,你全是string靠譜嗎……!?

測試確認代碼,自己改改配置跑一下:

$dbName = 'test';

$host = '127.0.0.1';

$port = 3306;

$username = 'root';

$password = '121212';

mysql_connect($host . ':' . $port, $username, $password) || die('連接數據庫失敗:' . mysql_error());

mysql_select_db($dbName) || die('選擇數據庫失敗' . $dbName);

if(!$result = mysql_query('select * from user limit 1')){

die('查詢出錯:' . mysql_error());

}

while($row = mysql_fetch_assoc($result)){

var_dump($row);

}

結果就是這兩個int型的字段傳到php里后變成了string

找了一些資料,據說是mysql擴展只是簡單地讀了數據,沒有做類型轉換的

解決辦法:用PDO ?

在這個時代,如果你依然用mysql擴展的話可能算很落伍了,除非你在維護很舊的程序。從PHP5.5版本官方就開始準備放棄對mysql擴展的支持了

那咱該用PDO擴展才比較能順應時代的潮流,然而只用基本的PDO查詢流程也是會有相同的問題:

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

$statement = $pdo->query('select * from user limit 1');

$result = $statement->fetchAll(\PDO::FETCH_ASSOC);

var_dump($result);

應該這樣的:

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

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

$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); //這個可以不設置,因為通常默認為 false,但強行設置可以加個保障,不信你改成true看看,問題又回來了

$statement = $pdo->query('select * from user limit 1');

$result = $statement->fetchAll(\PDO::FETCH_ASSOC);

var_dump($result);

備注:如果字段是decimal類型,那即使對PDO進行設置,但還是會返回string類型

總結

以上是生活随笔為你收集整理的php mysql int string_mysql查出的 int 型字段都是 string的全部內容,希望文章能夠幫你解決所遇到的問題。

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