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

<legend id='iCIGb'><style id='iCIGb'><dir id='iCIGb'><q id='iCIGb'></q></dir></style></legend>

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

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

    3. <tfoot id='iCIGb'></tfoot>

      mySQLi 準備好的語句無法 get_result()

      mySQLi prepared statement unable to get_result()(mySQLi 準備好的語句無法 get_result())
        <i id='EUWhs'><tr id='EUWhs'><dt id='EUWhs'><q id='EUWhs'><span id='EUWhs'><b id='EUWhs'><form id='EUWhs'><ins id='EUWhs'></ins><ul id='EUWhs'></ul><sub id='EUWhs'></sub></form><legend id='EUWhs'></legend><bdo id='EUWhs'><pre id='EUWhs'><center id='EUWhs'></center></pre></bdo></b><th id='EUWhs'></th></span></q></dt></tr></i><div class="tjv9x7x" id='EUWhs'><tfoot id='EUWhs'></tfoot><dl id='EUWhs'><fieldset id='EUWhs'></fieldset></dl></div>
          <tbody id='EUWhs'></tbody>
            <bdo id='EUWhs'></bdo><ul id='EUWhs'></ul>
          • <legend id='EUWhs'><style id='EUWhs'><dir id='EUWhs'><q id='EUWhs'></q></dir></style></legend>

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

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

              1. 本文介紹了mySQLi 準備好的語句無法 get_result()的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                問題描述

                我完全被 mySQLi 弄糊涂了.盡管我多年來一直在使用過程 mysql 調用,但我想習慣于為它提供的 db security/mySQL 注入保護制作準備好的語句.我正在嘗試編寫一個簡單的選擇語句(是的,我知道為此進行程序調用可提供性能增強).運行時,我得到所有回聲,直到我點擊 $result = $stmt->get_result(); 組件.這一切對我來說似乎相當簡單,但在閱讀了有關 mySQLi 的手冊數小時后,我不知所措.任何想法為什么會失敗?

                I am totally confused by mySQLi. Although I have been using procedural mysql calls for years, I want to get used to making prepared statements for the db security/mySQL injection protection it offers. I am trying to write a simple select statement (yes I know making a procedural call for this offers performance enhancement). When run, I get all the echoes until I hit the $result = $stmt->get_result(); component. It all seems fairly straightforward to me, but I am at a loss after hours of reading manuals on mySQLi. Any ideas why this would be failing?

                *注意:這是一個測試環境,雖然沒有進行字符清理/轉義,但我只是將有效內容傳遞到變量 $username 和 $email 中.而且,我已經查看了所有內容以找到我的問題的解決方案.

                *note: this is a test environment and while no sanitizing/escaping of characters is taking place, I am only passing valid content into the variables $username and $email. And also, I have looked all over SO to find the solution to my issue.

                function checkUsernameEmailAvailability($username, $email) {
                    //Instantiate mysqli connection
                    @$mysqli = new mysqli(C_HOST,C_USER,C_PASS,C_BASE) or die("Failed to connect to MySQL database...");
                    if (!$mysqli)
                    {
                        echo 'Error: Could not connect to database.  Please try again later...';
                        exit;
                    } else {
                        echo 'mysqli created';
                    }
                
                    /* Create a prepared statement */   
                    if($stmt = $mysqli -> prepare("SELECT username,email FROM tb_users WHERE username=? OR email=?")) {
                        echo '<br />MYSQLi: ';
                
                        /* Bind parameters s - string, b - boolean, i - int, etc */
                        $stmt -> bind_param("ss", $username, $email);
                        echo '<br />paramsBound...';
                
                        /* Execute it */
                        $stmt -> execute();     
                        echo '<br />Executed';
                
                        $result = $stmt->get_result();
                        echo '<br />Result acquired';
                
                        /* now you can fetch the results into an array - NICE */
                        $myrow = $result->fetch_assoc();
                        echo '<br />Fetched';
                
                
                        /* Close statement */
                        /$stmt -> close();
                        echo '<br />Done mysqli';
                    }
                }    
                

                另外,每次調用函數時都必須實例化一個 mysqli 嗎?我假設它們不是像程序 mysql 中那樣的持久數據庫連接.是的,我知道這是一個范圍問題,不,我無法理解此類變量的范圍.我在函數外聲明的時候,進入函數時不可用.

                Also, do I have to instantiate a mysqli every time I call a function? I'm assuming they're not persistent db connects like in procedural mysql. Yes, I am aware this is a scope issue, and no I have not been able to understand the scoping of this class variable. When I declared it outside of the function, it was not available when I came into the function.

                更新如果我將第 12 行更改為:

                UPDATE if I change line 12 from:

                if($stmt = $mysqli -> prepare("SELECT username,email FROM tb_users WHERE username=? OR email=?")) {
                

                到:

                    $stmt = $mysqli->stmt_init();
                    if($stmt = $mysqli -> prepare("SELECT username,email FROM tb_users WHERE username=? OR email=?")) {
                        if(!stmt) echo 'Statement prepared'; else echo 'Statement NOT prepared';
                

                我沒有準備好聲明.現在我更糊涂了....

                I get Statement NOT prepared. Now I'm even more confused....

                更新:我聯系了我的托管服務提供商,顯然支持 mySQLi,并且存在 mysqlnd 驅動程序.也許有一種方法可以簡單地測試這個?盡管過去他們通常會給我非常有見地的答案.

                UPDATE: I contacted my hosting provider and apparently mySQLi is supported, and the mysqlnd driver is present. Perhaps there is a way to simply test this? Although they usually have given me pretty knowledgeable answers in the past.

                更新...再次:我自己檢查了我的服務器功能并發現,雖然存在 mysqli 和 PDO,但 mysqlnd 不存在.因此,我明白為什么 get_result() 不起作用(我認為需要 mysqlnd),我仍然不明白為什么準備好的語句本身不起作用.

                UPDATE...AGAIN: I checked my server capabilities myself and discovered, while mysqli and PDO are present, mysqlnd is not. Thusly, I understand why get_result() will not work (mysqlnd required I think), I still don't understand why the prepared statement itself will not work.

                推薦答案

                通過一些檢查,盡管我的主機上安裝了 mysqli,但顯然 mysqlnd 驅動程序不存在.因此,無法使用 get_result()(php 手冊將 get_result 定義為依賴于 mysqlnd),而是需要進行額外的編碼以按照我想要的方式處理我的結果.

                Through some checking, even though mysqli is installed on my host, apparently the mysqlnd driver is not present. Therefore, get_result() can not be used(php manual defines get_result as mysqlnd dependent), and instead extra coding would need to be done to handle my result the way I would like.

                因此,我決定嘗試了解 PDO 的工作原理,幾分鐘之內,瞧!!!

                Therefore, I decided to try and learn how PDO works, and within minutes, voila!!!

                用這個替換上面的代碼:

                Replaced the above code with this:

                function checkUsernameEmailAvailability($username, $email) {
                
                echo 'pdo about to be created';
                
                $dsn = 'mysql:dbname='.C_BASE.';host='.C_HOST;
                $user = C_USER;
                $password = C_PASS;
                
                try {
                    $dbh = new PDO($dsn, $user, $password);
                } catch (PDOException $e) {
                    echo 'Connection failed: ' . $e->getMessage();
                }
                
                $params = array(':username' => $username, ':email' => $email);
                
                try{
                $sth = $dbh->prepare('SELECT username,email FROM tb_users WHERE username = :username OR email = :email ');
                } catch(PDOException $e) {
                    echo 'Prepare failed: ' . $e->getMessage();
                }
                
                try{
                $sth->execute($params);
                } catch(PDOException $e) {
                    echo 'Execute failed: ' . $e->getMessage();
                }
                $result = $sth->fetch(PDO::FETCH_ASSOC);
                print_r($result);
                }
                

                我能想到的盡可能多的錯誤檢查,首先破解它根本沒有問題!

                As much error checking as I could think of, and no problems at all first crack at it!

                最終代碼

                function checkUsernameEmailAvailability($username, $email) {
                    $dsn = 'mysql:dbname='.C_BASE.';host='.C_HOST;
                    $user = C_USER;
                    $password = C_PASS;
                    new PDO($dsn, $user, $password);
                
                    $params = array(':username' => $username, ':email' => $email);
                
                    $sth = $dbh->prepare('SELECT username,email FROM tb_users WHERE username = :username OR email = :email ');
                    $sth->execute($params);
                    $result = $sth->fetch(PDO::FETCH_ASSOC);
                
                    print_r($result);
                }
                

                這篇關于mySQLi 準備好的語句無法 get_result()的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持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 中保持其類型?)
                1. <legend id='TfAXT'><style id='TfAXT'><dir id='TfAXT'><q id='TfAXT'></q></dir></style></legend>

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

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

                            <tbody id='TfAXT'></tbody>
                          主站蜘蛛池模板: 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 杭州公司变更法人-代理记账收费价格-公司注销代办_杭州福道财务管理咨询有限公司 | 工装定制/做厂家/公司_工装订做/制价格/费用-北京圣达信工装 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 退火炉,燃气退火炉,燃气热处理炉生产厂家-丹阳市丰泰工业炉有限公司 | 反渗透阻垢剂-缓蚀阻垢剂厂家-循环水处理药剂-山东鲁东环保科技有限公司 | 一点车讯-汽车网站,每天一点最新车讯! | 钛板_钛管_钛棒_钛盘管-无锡市盛钛科技有限公司 | 一体化污水处理设备,一体化污水设备厂家-宜兴市福源水处理设备有限公司 | 不锈钢搅拌罐_高速搅拌罐厂家-无锡市凡格德化工装备科技有限公司 | 桐城新闻网—桐城市融媒体中心主办 | 设定时间记录电子秤-自动累计储存电子秤-昆山巨天仪器设备有限公司 | 一体化净水器_一体化净水设备_一体化水处理设备-江苏旭浩鑫环保科技有限公司 | 干式变压器厂_干式变压器厂家_scb11/scb13/scb10/scb14/scb18干式变压器生产厂家-山东科锐变压器有限公司 | 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 | 上海新光明泵业制造有限公司-电动隔膜泵,气动隔膜泵,卧式|立式离心泵厂家 | 吨袋包装机|吨包秤|吨包机|集装袋包装机-烟台华恩科技 | 工业制氮机_psa制氮机厂家-宏骁智能装备科技江苏有限公司 | 加热制冷恒温循环器-加热制冷循环油浴-杭州庚雨仪器有限公司 | 粘弹体防腐胶带,聚丙烯防腐胶带-全民塑胶 | 柔性测斜仪_滑动测斜仪-广州杰芯科技有限公司 | 电缆接头_防水接头_电缆防水接头_防水电缆接头_上海闵彬 | 翅片管散热器价格_钢制暖气片报价_钢制板式散热器厂家「河北冀春暖气片有限公司」 | 液压升降平台_剪叉式液压/导轨式升降机_传菜机定做「宁波日腾升降机厂家」 | 生态板-实木生态板-生态板厂家-源木原作生态板品牌-深圳市方舟木业有限公司 | 地图标注-手机导航电子地图如何标注-房地产商场地图标记【DiTuBiaoZhu.net】 | 自动焊锡机_点胶机_螺丝机-锐驰机器人 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 全自动不干胶贴标机_套标机-上海今昂贴标机生产厂家 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 土壤养分检测仪_肥料养分检测仪_土壤水分检测仪-山东莱恩德仪器 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 中央空调温控器_风机盘管温控器_智能_液晶_三速开关面板-中央空调温控器厂家 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | 橡胶膜片,夹布膜片,橡胶隔膜密封,泵阀设备密封膜片-衡水汉丰橡塑科技公司网站 | 北京租车牌|京牌指标租赁|小客车指标出租 | 施工电梯_齿条货梯_烟囱电梯_物料提升机-河南大诚机械制造有限公司 | 北京三友信电子科技有限公司-ETC高速自动栏杆机|ETC机柜|激光车辆轮廓测量仪|嵌入式车道控制器 | 电子厂招聘_工厂招聘_普工招聘_小时工招聘信息平台-众立方招工网 |