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

  • <tfoot id='qzutH'></tfoot>

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

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

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

      1. Mysqli 準備語句從數組動態構建 INSERT 查詢

        Mysqli prepared statements build INSERT query dynamically from array(Mysqli 準備語句從數組動態構建 INSERT 查詢)

          1. <small id='TYDLD'></small><noframes id='TYDLD'>

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

              • <bdo id='TYDLD'></bdo><ul id='TYDLD'></ul>
              • <legend id='TYDLD'><style id='TYDLD'><dir id='TYDLD'><q id='TYDLD'></q></dir></style></legend>

                    <tbody id='TYDLD'></tbody>
                  本文介紹了Mysqli 準備語句從數組動態構建 INSERT 查詢的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  我正在嘗試用 PHP(不是 OOP)開發我的函數,以創建一個 CRUD.目標是對任何表使用相同的功能,但我已經陷入第一個.不知道該怎么做.

                  I'm trying to develop my functions in PHP (not OOP), to create a CRUD. The goal is to use the same function to any table, but I got stuck already in the first one. Can't figure how to do this.

                  我現在擁有的:

                  // function to avoid injections
                  function validate($link, $field){
                      $valid = mysqli_real_escape_string($link, $field);
                      $valid = strip_tags($valid);
                      return $valid;
                  }
                  
                  // validate input of array
                  function sqlWithArray($link,$array){
                      $return = array();
                      foreach($array as $field=>$val){
                          $return[$field] = "'".validate($link, $val)."'";
                      }
                      return $return;
                  }
                  
                  // Multi insert to any table
                  function InsertDB($link, $table, array $args){
                      $rows = sqlWithArray($link,$args);
                      $keys = "(".implode(array_keys($args)," ,").")";
                      $values = " VALUES (".implode(array_values($args),", ").")";
                      $query = "INSERT INTO $table $keys $values";
                  
                      return $link->execute();
                  }
                  

                  我嘗試將其用作:

                  InsertDB($link, "test_table", $args); //$args is an array
                  

                  但我不斷收到以下錯誤:

                  But I keep getting the following error:

                  PHP Fatal error:  Uncaught Error: Call to undefined method mysqli::execute() in includesfunctions.php:37
                  

                  我的 37 行是空的,但 36 和 38 如下:

                  My 37 line is empty, but 36 and 38 are the following:

                  $query = "INSERT INTO $table $keys $values";
                  
                  return $link->execute();
                  

                  我在這里做錯了什么?

                  推薦答案

                  擁有這樣的功能是一個好主意本身.它表明你是一個內心深處的程序員,而不僅僅是一個像樂高人偶一樣用現成的積木編寫 PHP 的修補匠.這樣的功能可以極大地改進您的代碼.

                  Having such a function is a good idea per se. It indicates that you are a programmer in your heart, not just a tinkerer that writes PHP from ready made blocks like a Lego figure. Such a function can greatly improve your code.

                  權力越大,責任越大.通過表和字段名稱,這樣的函數是SQL 注入的持續危險.你應該注意這一點.更不用說它應該使用準備好的語句為數據正確實現.

                  But with great power comes great responsibility. Such a function is a constant danger of SQL injection, through table and field names. You should take care of that. Not to mention it should be properly implemented using prepared statements for the data.

                  首先,您需要一個通用函數來使用查詢和參數數組執行任意 MySQL 查詢.我有一個簡單的 mysqli 輔助函數給你.執行所有準備好的查詢將是一個基本功能:

                  First of all, you will need a general purpose function to execute an arbitrary MySQL query using a query and an array of parameters. I have a simple mysqli helper function for you. It will be a basic function to execute all prepared queries:

                  function prepared_query($mysqli, $sql, $params, $types = "")
                  {
                      $types = $types ?: str_repeat("s", count($params));
                      $stmt = $mysqli->prepare($sql);
                      $stmt->bind_param($types, ...$params);
                      $stmt->execute();
                      return $stmt;
                  }
                  

                  現在我們可以開始動態構建 SQL 查詢了.為此,我們需要一個可以轉義標識符的函數

                  Now we can start constructing the SQL query dynamically. For this we will need a function that would escape identifiers

                  function escape_mysql_identifier($field){
                      return "`".str_replace("`", "``", $field)."`";
                  }
                  

                  它會使標識符安全,至少在您使用 Unocode 時是這樣.

                  It will make identifiers safe, at least as long as you are using Unocode.

                  現在我們可以繼續創建正確的 SQL 字符串.我們需要創建一個帶有占位符的 SQL,如下所示:

                  Now we can proceed to creation of the correct SQL string. We will need to create an SQL with placeholders, like this:

                  INSERT INTO `staff` (`name`,`occupation`) VALUES (?,?)
                  

                  所以讓我們編寫一個函數來創建這樣的查詢

                  So let's write a function that would create a query like this

                  function create_insert_query($table, $keys)
                  {
                      $keys = array_map('escape_mysql_identifier', $keys);
                      $fields = implode(",", $keys);
                      $table = escape_mysql_identifier($table);
                      $placeholders = str_repeat('?,', count($keys) - 1) . '?';
                      return "INSERT INTO $table ($fields) VALUES ($placeholders)";
                  }
                  

                  最后我們可以編寫期待已久的 crud 函數:

                  And finally we can write the long-sought crud function:

                  function crud_insert($conn, $table, $data) {
                      $sql = create_insert_query($table, array_keys($data));
                      prepared_query($conn, $sql, array_values($data));
                  }
                  

                  這樣稱呼

                  $args = ['name' => "D'Artagnan", "occupation" => 'musketeer'];
                  crud_insert($link, "test_table", $args); 
                  

                  這篇關于Mysqli 準備語句從數組動態構建 INSERT 查詢的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

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

                  相關文檔推薦

                  store_result() and get_result() in mysql returns false(mysql 中的 store_result() 和 get_result() 返回 false)
                  Call to undefined function mysqli_result::num_rows()(調用未定義的函數 mysqli_result::num_rows())
                  PHP Prepared Statement Problems(PHP 準備好的語句問題)
                  mysqli_fetch_array returning only one result(mysqli_fetch_array 只返回一個結果)
                  PHP MySQLi Multiple Inserts(PHP MySQLi 多次插入)
                  How do I make sure that values from MySQL keep their type in PHP?(如何確保 MySQL 中的值在 PHP 中保持其類型?)

                      <tfoot id='fnT6O'></tfoot>

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

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

                              <tbody id='fnT6O'></tbody>
                            <i id='fnT6O'><tr id='fnT6O'><dt id='fnT6O'><q id='fnT6O'><span id='fnT6O'><b id='fnT6O'><form id='fnT6O'><ins id='fnT6O'></ins><ul id='fnT6O'></ul><sub id='fnT6O'></sub></form><legend id='fnT6O'></legend><bdo id='fnT6O'><pre id='fnT6O'><center id='fnT6O'></center></pre></bdo></b><th id='fnT6O'></th></span></q></dt></tr></i><div class="vfb1rdf" id='fnT6O'><tfoot id='fnT6O'></tfoot><dl id='fnT6O'><fieldset id='fnT6O'></fieldset></dl></div>
                            <legend id='fnT6O'><style id='fnT6O'><dir id='fnT6O'><q id='fnT6O'></q></dir></style></legend>
                            主站蜘蛛池模板: 二手回收公司_销毁处理公司_设备回收公司-找回收信息网 | 精密线材测试仪-电线电缆检测仪-苏州欣硕电子科技有限公司 | 魔方网-培训咨询服务平台 | 深圳品牌设计公司-LOGO设计公司-VI设计公司-未壳创意 | 高精度-恒温冷水机-螺杆式冰水机-蒸发冷冷水机-北京蓝海神骏科技有限公司 | 农产品溯源系统_农产品质量安全追溯系统_溯源系统 | 医用空气消毒机-医用管路消毒机-工作服消毒柜-成都三康王 | 非小号行情 - 专业的区块链、数字藏品行情APP、金色财经官网 | 杭州成人高考_浙江省成人高考网上报名 | TTCMS自助建站_网站建设_自助建站_免费网站_免费建站_天天向上旗下品牌 | 冷却塔降噪隔音_冷却塔噪声治理_冷却塔噪音处理厂家-广东康明冷却塔降噪厂家 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 超声波清洗机_大型超声波清洗机_工业超声波清洗设备-洁盟清洗设备 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 电机铸铝配件_汽车压铸铝合金件_发动机压铸件_青岛颖圣赫机械有限公司 | 阳光模拟试验箱_高低温试验箱_高低温冲击试验箱_快速温变试验箱|东莞市赛思检测设备有限公司 | 建大仁科-温湿度变送器|温湿度传感器|温湿度记录仪_厂家_价格-山东仁科 | 成都APP开发-成都App定制-成都app开发公司-【未来久】 | 合肥仿石砖_合肥pc砖厂家_合肥PC仿石砖_安徽旭坤建材有限公司 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 电动车头盔厂家_赠品头盔_安全帽批发_山东摩托车头盔—临沂承福头盔 | 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 【直乐】河北石家庄脊柱侧弯医院_治疗椎间盘突出哪家医院好_骨科脊柱外科专业医院_治疗抽动症/关节病骨伤权威医院|排行-直乐矫形中医医院 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 猪I型/II型胶原-五克隆合剂-细胞冻存培养基-北京博蕾德科技发展有限公司 | 证券新闻,热播美式保罗1984第二部_腾讯1080p-仁爱影院 | 超声波反应釜【百科】-以马内利仪器| 高压管道冲洗清洗机_液压剪叉式升降机平台厂家-林君机电 | 液晶拼接屏厂家_拼接屏品牌_拼接屏价格_监控大屏—北京维康 | 档案密集柜_手动密集柜_智能密集柜_内蒙古档案密集柜-盛隆柜业内蒙古密集柜直销中心 | 继电器模组-IO端子台-plc连接线-省配线模组厂家-世麦德 | 除尘布袋_液体过滤袋_针刺毡滤料-杭州辉龙过滤技术有限公司 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 酵素生产厂家_酵素OEM_酵素加盟_酵素ODM_酵素原料厂家_厦门益力康 | 水成膜泡沫灭火剂_氟蛋白泡沫液_河南新乡骏华消防科技厂家 | 搜活动房网—活动房_集装箱活动房_集成房屋_活动房屋 | 【孔氏陶粒】建筑回填陶粒-南京/合肥/武汉/郑州/重庆/成都/杭州陶粒厂家 | 电竞馆加盟,沈阳网吧加盟费用选择嘉棋电竞_售后服务一体化 | 纯水设备_苏州皙全超纯水设备水处理设备生产厂家 | ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 |