pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

<i id='T6r88'><tr id='T6r88'><dt id='T6r88'><q id='T6r88'><span id='T6r88'><b id='T6r88'><form id='T6r88'><ins id='T6r88'></ins><ul id='T6r88'></ul><sub id='T6r88'></sub></form><legend id='T6r88'></legend><bdo id='T6r88'><pre id='T6r88'><center id='T6r88'></center></pre></bdo></b><th id='T6r88'></th></span></q></dt></tr></i><div class="nnth080" id='T6r88'><tfoot id='T6r88'></tfoot><dl id='T6r88'><fieldset id='T6r88'></fieldset></dl></div>
  • <small id='T6r88'></small><noframes id='T6r88'>

      <legend id='T6r88'><style id='T6r88'><dir id='T6r88'><q id='T6r88'></q></dir></style></legend>
    1. <tfoot id='T6r88'></tfoot>

          <bdo id='T6r88'></bdo><ul id='T6r88'></ul>

        PHP sqlsrv 驅(qū)動(dòng)程序和 PDO 驅(qū)動(dòng)程序之間的數(shù)據(jù)類型

        Data type differences between PHP sqlsrv driver and PDO driver(PHP sqlsrv 驅(qū)動(dòng)程序和 PDO 驅(qū)動(dòng)程序之間的數(shù)據(jù)類型差異)

          <tbody id='U9TYH'></tbody>

          <bdo id='U9TYH'></bdo><ul id='U9TYH'></ul>

              1. <i id='U9TYH'><tr id='U9TYH'><dt id='U9TYH'><q id='U9TYH'><span id='U9TYH'><b id='U9TYH'><form id='U9TYH'><ins id='U9TYH'></ins><ul id='U9TYH'></ul><sub id='U9TYH'></sub></form><legend id='U9TYH'></legend><bdo id='U9TYH'><pre id='U9TYH'><center id='U9TYH'></center></pre></bdo></b><th id='U9TYH'></th></span></q></dt></tr></i><div class="psjuqu5" id='U9TYH'><tfoot id='U9TYH'></tfoot><dl id='U9TYH'><fieldset id='U9TYH'></fieldset></dl></div>
                <tfoot id='U9TYH'></tfoot>
                <legend id='U9TYH'><style id='U9TYH'><dir id='U9TYH'><q id='U9TYH'></q></dir></style></legend>

                <small id='U9TYH'></small><noframes id='U9TYH'>

                  本文介紹了PHP sqlsrv 驅(qū)動(dòng)程序和 PDO 驅(qū)動(dòng)程序之間的數(shù)據(jù)類型差異的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

                  問(wèn)題描述

                  這里我使用的是 sqlsrv:

                  $conn = sqlsrv_connect("192.168.1.102,1433", array("Database"=>"RF_User", "UID"=>"rfo-gcp", "PWD" => ""));
                  
                  $tsql = "SELECT birthdate FROM tbl_rfaccount WHERE id = ?";
                  
                  $stmt = sqlsrv_query($conn, $tsql, array("test"));
                  
                  $result = sqlsrv_fetch_array($stmt);
                  
                  var_dump($result);
                  

                  結(jié)果:array(2) { [0]=>object(DateTime)#1 (3) { ["date"]=>string(26) "2020-04-19 20:40:00.000000" ["timezone_type"]=>int(3) [時(shí)區(qū)"]=>string(3) "UTC" } ["birthdate"]=>object(DateTime)#1 (3) { ["date"]=>string(26) "2020-04-19 20:40:00.000000" ["timezone_type"]=>int(3) [時(shí)區(qū)"]=>string(3) "UTC" } }

                  這里我使用的是PDO:

                  $conn = new PDO("sqlsrv:Server=192.168.1.102,1433; Database=RF_User;", "rfo-gcp", "");
                  
                  $tsql = "SELECT birthdate FROM tbl_rfaccount WHERE id = cast(? as varchar(13))";     
                  
                  $stmt = $conn->prepare($tsql);
                  
                  $stmt->execute(array("test"));
                  
                  $result = $stmt->fetch(PDO::FETCH_ASSOC);
                  
                  var_dump($result);
                  

                  結(jié)果:array(1) { ["birthdate"]=>string(19) "2020-04-19 20:40:00" }

                  如果您注意到,我必須在 PDO 代碼上使用 cast(? as varchar(13)).沒(méi)有它不會(huì)返回任何行.在 sqlsrv 上,我不必使用 CAST() 函數(shù).為什么是這樣?另外,數(shù)據(jù)庫(kù)上的id列是一個(gè)BINARY(13),那么為什么我要強(qiáng)制轉(zhuǎn)換idvarchar 而不是 binary(使用二進(jìn)制轉(zhuǎn)換它也找不到行)?

                  If you notice, I had to use cast(? as varchar(13)) on the PDO code. Without it would not return any row. On the sqlsrv I didn't have to use the CAST() function. Why is this? Also, the id column on the database is a BINARY(13), so why do I have to cast the id to varchar and not to binary (with binary cast it also doesn't find the row)?

                  推薦答案

                  為什么日期和時(shí)間值的返回方式不同?

                  其實(shí)這只是一個(gè)設(shè)定.

                  當(dāng)您使用 PDO_SQLSRV(正如 在文檔中提到),日期和時(shí)間類型(smalldatetime、datetime、date、time、datetime2 和 datetimeoffset)默認(rèn)以字符串形式返回.PDO::ATTR_STRINGIFY_FETCHES 和 PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE 屬性都沒(méi)有任何影響.為了將日期和時(shí)間類型檢索為 PHP DateTime 對(duì)象,請(qǐng)將連接或語(yǔ)句屬性 PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPE 設(shè)置為 true(默認(rèn)為 false).

                  When you use PDO_SQLSRV (as is mentioned in the documentation), date and time types (smalldatetime, datetime, date, time, datetime2, and datetimeoffset) are by default returned as strings. Neither the PDO::ATTR_STRINGIFY_FETCHES nor the PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE attribute has any effect. In order to retrieve date and time types as PHP DateTime objects, set the connection or statement attribute PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPE to true (it is false by default).

                  當(dāng)您使用 SQLSRV 驅(qū)動(dòng)程序時(shí)(同樣來(lái)自 文檔)、smalldatetime、datetime、date、time、datetime2 和 datetimeoffset 類型將作為 PHP DateTime 對(duì)象返回.可以通過(guò)在連接字符串或語(yǔ)句級(jí)別設(shè)置 'ReturnDatesAsStrings' 選項(xiàng)來(lái)更改此行為.

                  When you use SQLSRV driver (again from the documentation), smalldatetime, datetime, date, time, datetime2, and datetimeoffset types will be returned as PHP DateTime objects. This behaviour can be changed by setting the 'ReturnDatesAsStrings' option in the connection string or at the statement level.

                  $conn = sqlsrv_connect(
                     "192.168.1.102,1433", 
                      array(
                         "ReturnDatesAsStrings"=>true,
                         "Database"=>"RF_User", 
                         "UID"=>"rfo-gcp", 
                         "PWD" => ""
                     )
                  );
                  

                  請(qǐng)注意,某些功能取決于 SQL Server 的 PHP 驅(qū)動(dòng)程序版本.

                  Note that some of the features depend on the version of PHP Driver for SQL Server.

                  如何轉(zhuǎn)換參數(shù)值?

                  在語(yǔ)句中使用 CAST()CONVERT() 函數(shù)并將參數(shù)值與字符串值綁定應(yīng)該可以工作.當(dāng)然,您可以在綁定參數(shù)時(shí)指定參數(shù)數(shù)據(jù)類型.

                  Using CAST() and CONVERT() functions in the statement and binding parameter value with string value should work. Of course, you can specify the parameter data type, when you bind a parameter.

                  對(duì)于 PDO_SQLSRV,您應(yīng)該為 PDOStatement::bindParam().

                  對(duì)于 SQLSRV,您可以使用擴(kuò)展的 $params syntax 指定 SQL Server數(shù)據(jù)類型,當(dāng)您調(diào)用 sqlsrv_query()sqlsrv_execute() 時(shí).

                  For SQLSRV you may use the extended $params syntax to specify the SQL Server data type, when you make a call to sqlsrv_query()sqlsrv_execute().

                  我可以重現(xiàn)這個(gè)問(wèn)題(PHP 7.1.12、PHP Driver for SQL Server 4.3.0+9904、SQL Server 2012),解決方案是使用:

                  I'm able to reproduce this issue (PHP 7.1.12, PHP Driver for SQL Server 4.3.0+9904, SQL Server 2012) and the solution is to use:

                  $params = array($id, SQLSRV_PARAM_IN, null, SQLSRV_SQLTYPE_BINARY);          // SQLSRV
                  $stmt->bindParam(1, $id, PDO::PARAM_LOB, null, PDO::SQLSRV_ENCODING_BINARY); // PDO_SQLSRV 
                  

                  表格:

                  CREATE TABLE tbl_rfaccount (id binary(13), birthdate datetime)
                  INSERT INTO tbl_rfaccount (id, birthdate) VALUES (CONVERT(binary(13), 'Test'), GETDATE())
                  

                  PHP:

                  <?php
                  ...
                  
                  // 
                  $id = "Test";
                  
                  // SQLSRV
                  $tsql = "SELECT birthdate FROM tbl_rfaccount WHERE id = ?";
                  $params = array($id, SQLSRV_PARAM_IN, null, SQLSRV_SQLTYPE_BINARY);
                  $stmt = sqlsrv_query($conn, $tsql, $params);
                  if ($stmt === false) {
                      echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
                      exit;
                  }
                  $result = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
                  var_dump($result);
                  
                  // PDO_SQLSRV
                  $tsql = "SELECT birthdate FROM tbl_rfaccount WHERE id = ?";     
                  $stmt = $conn->prepare($tsql);
                  $stmt->bindParam(1, $id, PDO::PARAM_LOB, null, PDO::SQLSRV_ENCODING_BINARY);
                  $stmt->execute();
                  $result = $stmt->fetch(PDO::FETCH_ASSOC);
                  var_dump($result);
                  
                  ...
                  ?> 
                  

                  這篇關(guān)于PHP sqlsrv 驅(qū)動(dòng)程序和 PDO 驅(qū)動(dòng)程序之間的數(shù)據(jù)類型差異的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

                  【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

                  相關(guān)文檔推薦

                  MySQLi prepared statement amp; foreach loop(MySQLi準(zhǔn)備好的語(yǔ)句amp;foreach 循環(huán))
                  Is mysqli_insert_id() gets record from whole server or from same user?(mysqli_insert_id() 是從整個(gè)服務(wù)器還是從同一用戶獲取記錄?)
                  PHP MySQLi doesn#39;t recognize login info(PHP MySQLi 無(wú)法識(shí)別登錄信息)
                  mysqli_select_db() expects exactly 2 parameters(mysqli_select_db() 需要 2 個(gè)參數(shù))
                  Php mysql pdo query: fill up variable with query result(Php mysql pdo 查詢:用查詢結(jié)果填充變量)
                  MySQLI 28000/1045 Access denied for user #39;root#39;@#39;localhost#39;(MySQLI 28000/1045 用戶“root@“l(fā)ocalhost的訪問(wèn)被拒絕)
                  <legend id='o2ELl'><style id='o2ELl'><dir id='o2ELl'><q id='o2ELl'></q></dir></style></legend>
                    • <bdo id='o2ELl'></bdo><ul id='o2ELl'></ul>

                          <small id='o2ELl'></small><noframes id='o2ELl'>

                          <i id='o2ELl'><tr id='o2ELl'><dt id='o2ELl'><q id='o2ELl'><span id='o2ELl'><b id='o2ELl'><form id='o2ELl'><ins id='o2ELl'></ins><ul id='o2ELl'></ul><sub id='o2ELl'></sub></form><legend id='o2ELl'></legend><bdo id='o2ELl'><pre id='o2ELl'><center id='o2ELl'></center></pre></bdo></b><th id='o2ELl'></th></span></q></dt></tr></i><div class="khzrv50" id='o2ELl'><tfoot id='o2ELl'></tfoot><dl id='o2ELl'><fieldset id='o2ELl'></fieldset></dl></div>

                            <tfoot id='o2ELl'></tfoot>

                              <tbody id='o2ELl'></tbody>
                            主站蜘蛛池模板: 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | sus630/303cu不锈钢棒,440C/430F/17-4ph不锈钢研磨棒-江苏德镍金属科技有限公司 | 冷热冲击试验箱_温度冲击试验箱价格_冷热冲击箱排名_林频厂家 | 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 磁粉制动器|张力控制器|气胀轴|伺服纠偏控制器整套厂家--台灵机电官网 | 北京中创汇安科贸有限公司 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 河北码上网络科技|邯郸小程序开发|邯郸微信开发|邯郸网站建设 | 制氮设备-变压吸附制氮设备-制氧设备-杭州聚贤气体设备制造有限公司 | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | 运动木地板厂家,篮球场木地板品牌,体育场馆木地板安装 - 欧氏运动地板 | 杭州公司变更法人-代理记账收费价格-公司注销代办_杭州福道财务管理咨询有限公司 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 山东钢格板|栅格板生产厂家供应商-日照森亿钢格板有限公司 | 深圳市万色印象美业有限公司| 高博医疗集团上海阿特蒙医院| 断桥铝破碎机_发动机破碎机_杂铝破碎机厂家价格-皓星机械 | 强效碱性清洗剂-实验室中性清洗剂-食品级高纯氮气发生器-上海润榕科学器材有限公司 | 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | 威实软件_软件定制开发_OA_OA办公系统_OA系统_办公自动化软件 | 哈希PC1R1A,哈希CA9300,哈希SC4500-上海鑫嵩实业有限公司 | 深圳高新投三江工业消防解决方案提供厂家_服务商_园区智慧消防_储能消防解决方案服务商_高新投三江 | 福州时代广告制作装饰有限公司-福州广告公司广告牌制作,福州展厅文化墙广告设计, | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 立式_复合式_壁挂式智能化电伴热洗眼器-上海达傲洗眼器生产厂家 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 丹佛斯变频器-丹佛斯压力开关-变送器-广州市风华机电设备有限公司 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 成都竞价托管_抖音代运营_网站建设_成都SEM外包-成都智网创联网络科技有限公司 | 小型气象站_便携式自动气象站_校园气象站-竞道气象设备网 | 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 矿用履带式平板车|探水钻机|气动架柱式钻机|架柱式液压回转钻机|履带式钻机-启睿探水钻机厂家 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 泉州陶瓷pc砖_园林景观砖厂家_石英砖地铺石价格 _福建暴风石英砖 | 超声波破碎仪-均质乳化机(供应杭州,上海,北京,广州,深圳,成都等地)-上海沪析实业有限公司 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 辊道窑炉,辊道窑炉厂家-山东艾希尔| 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 散热器-电子散热器-型材散热器-电源散热片-镇江新区宏图电子散热片厂家 |