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

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

        • <bdo id='n0VDq'></bdo><ul id='n0VDq'></ul>

        <tfoot id='n0VDq'></tfoot>

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

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

      1. 了解 PDO 準備好的語句和綁定參數

        Understanding PDO Prepared Statements and Binding Parameters(了解 PDO 準備好的語句和綁定參數)
      2. <tfoot id='HUkrJ'></tfoot>
      3. <i id='HUkrJ'><tr id='HUkrJ'><dt id='HUkrJ'><q id='HUkrJ'><span id='HUkrJ'><b id='HUkrJ'><form id='HUkrJ'><ins id='HUkrJ'></ins><ul id='HUkrJ'></ul><sub id='HUkrJ'></sub></form><legend id='HUkrJ'></legend><bdo id='HUkrJ'><pre id='HUkrJ'><center id='HUkrJ'></center></pre></bdo></b><th id='HUkrJ'></th></span></q></dt></tr></i><div class="axazqa7" id='HUkrJ'><tfoot id='HUkrJ'></tfoot><dl id='HUkrJ'><fieldset id='HUkrJ'></fieldset></dl></div>

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

                  <tbody id='HUkrJ'></tbody>
                  <bdo id='HUkrJ'></bdo><ul id='HUkrJ'></ul>
                  <legend id='HUkrJ'><style id='HUkrJ'><dir id='HUkrJ'><q id='HUkrJ'></q></dir></style></legend>
                  本文介紹了了解 PDO 準備好的語句和綁定參數的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  根據經驗以及不斷被告知使用準備好的語句和綁定參數的好處,我一直在我的代碼中使用這兩種技術,但是我想確切地了解這兩種技術中的每一種的目的:

                  From experience and also having been told constantly the benefits of using prepared statements and binding my parameters, I have constantly used those two techniques in my code, however I would like to understand exactly the purpose of each of those two techiques:

                  根據我對準備好的語句的理解:

                  From my understanding of prepared statements:

                  $sql = "SELECT * FROM myTable WHERE id = ".$id;
                  $stmt = $conn->prepare($sql);
                  $stmt->execute();
                  

                  前面的代碼應該使用我提出的查詢在數據庫中創建一種緩沖區.現在根據我的理解(我可能是非常錯誤的),以前的代碼是不安全的,因為字符串 $sql 可以是任何取決于 $id 實際上是,如果 $id = 1;DROP TABLE myTable;--,即使我有準備好的語句,我也會插入惡意查詢.

                  The previous code should create a sort of a buffer in the database with the query I proposed. Now FROM MY UNDERSTANDING (and I could be very wrong), the previous code is insecure, because the string $sql could be anything depending on what $id actually is, and if $id = 1; DROP TABLE myTable;--, I would be inserting a malicious query even though I have a prepared statement.

                  根據我的理解這是綁定我的參數的地方.如果我改為執行以下操作:

                  FROM MY UNDERSTANDING this is where binding my parameters com in. If I do the following instead:

                  $sql = "SELECT * FROM myTable WHERE id = :id";
                  $stmt = $conn->prepare($sql);
                  $stmt->bindParam(':id', $id);
                  $stmt->execute();
                  

                  數據庫應該事先知道sql語句的所有部分:SELECT 這些列: * FROM myTableWHERE id = 用戶輸入的變量",如果 "a variable that was input by the user" != a variable,則查詢失敗.

                  The database should know exactly all the parts of the sql statement before hand: SELECT these columns: * FROM myTable and WHERE id = "a variable that was input by the user", and if "a variable that was input by the user" != a variable, the query fails.

                  有人告訴我我的理解是正確的,有人告訴我這是錯誤的,如果我錯了、正確或遺漏了什么,有人可以告訴我嗎?并根據需要詳細說明,非常感謝所有反饋!

                  I have been told by some my understanding is correct, and by others that it is false, could someone please let me know if I am wrong, correct, or missing something? And elaborate as much as you want, all feedback is greatly appreciated!

                  推薦答案

                  您說得對,第一種情況是不安全的.但是,重要的是要了解,準備語句僅在您使用可變數據和/或重復執行相同查詢時才有價值.如果您正在執行沒有變量的簡單語句,您可以簡單地這樣做:

                  You're correct that the first case is insecure. It's important to understand though, that preparing a statement only has value if you are using variable data, and/or executing the same query repeatedly. If you are executing plain statements with no variables, you could simply do this:

                  $sql = "SELECT * from myTable WHERE this_column IS NOT NULL";
                  $result = $conn->query($sql);
                  

                  最后得到一個 PDOStatement 對象,就像你使用 PDO::exec() 一樣.

                  And end up with a PDOStatement object to work with, just like when you use PDO::exec().

                  對于你的第二種情況,你基本上是正確的.發生的事情是傳遞給數據庫的變量被轉義和引用(除非你用 PDOStatement::bindParam() 的第三個參數另外指定,它作為一個字符串發送,這在大多數情況下都很好.)因此,如果發送了錯誤數據,查詢將不會失敗".它的行為就像您傳遞了一個在數據庫中不作為 ID 存在的有效數字一樣.當然,有一些邊緣情況,其中即使有正確準備的聲明,您仍然容易受到攻擊.

                  For your second case, again, you're largely correct. What's happening is the variable passed to the database is escaped and quoted (unless you specify otherwise with the third argument to PDOStatement::bindParam(), it's sent as a string which is fine for most cases.) So, the query won't "fail" if bad data is sent. It behaves exactly as if you had passed a valid number that didn't exist as an ID in the database. There are, of course, some edge cases where you are still vulnerable even with a correctly prepared statement.

                  此外,為了讓生活更輕松,您可以使用這樣的準備好的語句來進行隱式綁定:

                  Also, to make life easier, you can use prepared statements like this, to do implicit binding:

                  $sql = "SELECT * FROM myTable WHERE id = :id";
                  $stmt = $conn->prepare($sql);
                  $stmt->execute([":id"=>$id]);
                  

                  或者甚至像這樣,帶有未命名的參數:

                  Or even like this, with un-named parameters:

                  $sql = "SELECT * FROM myTable WHERE id = ?";
                  $stmt = $conn->prepare($sql);
                  $stmt->execute([$id]);
                  

                  當然,我在輸入答案時已在評論中解釋了大部分內容!

                  Naturally, most of this has been explained in the comments while I was typing up the answer!

                  這篇關于了解 PDO 準備好的語句和綁定參數的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

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

                  相關文檔推薦

                  Deadlock exception code for PHP, MySQL PDOException?(PHP、MySQL PDOException 的死鎖異常代碼?)
                  PHP PDO MySQL scrollable cursor doesn#39;t work(PHP PDO MySQL 可滾動游標不起作用)
                  PHP PDO ODBC connection(PHP PDO ODBC 連接)
                  Using PDO::FETCH_CLASS with Magic Methods(使用 PDO::FETCH_CLASS 和魔術方法)
                  php pdo get only one value from mysql; value that equals to variable(php pdo 只從 mysql 獲取一個值;等于變量的值)
                  MSSQL PDO could not find driver(MSSQL PDO 找不到驅動程序)

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

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

                            <legend id='fxa8C'><style id='fxa8C'><dir id='fxa8C'><q id='fxa8C'></q></dir></style></legend>
                            主站蜘蛛池模板: 磁力抛光机_磁力研磨机_磁力去毛刺机-冠古设备厂家|维修|租赁【官网】 | 【北京写字楼出租_写字楼租赁_办公室出租网/出售】-远行地产官网 | 西安文都考研官网_西安考研辅导班_考研培训机构_西安在职考研培训 | 山东钢格板|栅格板生产厂家供应商-日照森亿钢格板有限公司 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 大数据营销公司_舆情监测软件_上海SEO公司-文军营销官网 | 众品家具网-家具品牌招商_家具代理加盟_家具门户的首选网络媒体。 | 特种阀门-调节阀门-高温熔盐阀-镍合金截止阀-钛阀门-高温阀门-高性能蝶阀-蒙乃尔合金阀门-福建捷斯特阀门制造有限公司 | 生物除臭剂-除味剂-植物-污水除臭剂厂家-携葵环保有限公司 | 阻垢剂,反渗透阻垢剂,缓蚀阻垢剂-山东普尼奥水处理科技有限公司 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 苏州工作服定做-工作服定制-工作服厂家网站-尺品服饰科技(苏州)有限公司 | 专业音响设备_舞台音响设备_会议音响工程-首选深圳一禾科技 | 仓储货架_南京货架_钢制托盘_仓储笼_隔离网_环球零件盒_诺力液压车_货架-南京一品仓储设备制造公司 | 并网柜,汇流箱,电控设备,中高低压开关柜,电气电力成套设备,PLC控制设备订制厂家,江苏昌伟业新能源科技有限公司 | 换网器_自动换网器_液压换网器--郑州海科熔体泵有限公司 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 北京翻译公司_同传翻译_字幕翻译_合同翻译_英语陪同翻译_影视翻译_翻译盖章-译铭信息 | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 | 禹城彩钢厂_钢结构板房_彩钢复合板-禹城泰瑞彩钢复合板加工厂 | 山东led显示屏,山东led全彩显示屏,山东LED小间距屏,临沂全彩电子屏-山东亚泰视讯传媒有限公司 | 凝胶成像系统(wb成像系统)百科-上海嘉鹏| 铝板冲孔网,不锈钢冲孔网,圆孔冲孔网板,鳄鱼嘴-鱼眼防滑板,盾构走道板-江拓数控冲孔网厂-河北江拓丝网有限公司 | 自恢复保险丝_贴片保险丝_力特保险丝_Littelfuse_可恢复保险丝供应商-秦晋电子 | 东莞喷砂机-喷砂机-喷砂机配件-喷砂器材-喷砂加工-东莞市协帆喷砂机械设备有限公司 | 冷油器-冷油器换管改造-连云港灵动列管式冷油器生产厂家 | MES系统工业智能终端_生产管理看板/安灯/ESOP/静电监控_讯鹏科技 | 微信小程序定制,广州app公众号商城网站开发公司-广东锋火 | 热缩管切管机-超声波切带机-织带切带机-无纺布切布机-深圳市宸兴业科技有限公司 | 彩信群发_群发彩信软件_视频短信营销平台-达信通 | 【黄页88网】-B2B电子商务平台,b2b平台免费发布信息网 | 艺术生文化课培训|艺术生文化课辅导冲刺-济南启迪学校 | ET3000双钳形接地电阻测试仪_ZSR10A直流_SXJS-IV智能_SX-9000全自动油介质损耗测试仪-上海康登 | 北京翻译公司_同传翻译_字幕翻译_合同翻译_英语陪同翻译_影视翻译_翻译盖章-译铭信息 | 磁力加热搅拌器-多工位|大功率|数显恒温磁力搅拌器-司乐仪器官网 | 井式炉-台车式回火炉-丹阳市电炉厂有限公司 |