久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

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

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

      2. PHP mysql_stmt::fetch() 導(dǎo)致 PHP 致命錯(cuò)誤內(nèi)存耗盡

        PHP mysql_stmt::fetch() gives PHP Fatal error memory exhausted(PHP mysql_stmt::fetch() 導(dǎo)致 PHP 致命錯(cuò)誤內(nèi)存耗盡)

            <tbody id='Zo5dX'></tbody>
          <legend id='Zo5dX'><style id='Zo5dX'><dir id='Zo5dX'><q id='Zo5dX'></q></dir></style></legend>

              <tfoot id='Zo5dX'></tfoot>
            1. <small id='Zo5dX'></small><noframes id='Zo5dX'>

                • <bdo id='Zo5dX'></bdo><ul id='Zo5dX'></ul>
                • <i id='Zo5dX'><tr id='Zo5dX'><dt id='Zo5dX'><q id='Zo5dX'><span id='Zo5dX'><b id='Zo5dX'><form id='Zo5dX'><ins id='Zo5dX'></ins><ul id='Zo5dX'></ul><sub id='Zo5dX'></sub></form><legend id='Zo5dX'></legend><bdo id='Zo5dX'><pre id='Zo5dX'><center id='Zo5dX'></center></pre></bdo></b><th id='Zo5dX'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='Zo5dX'><tfoot id='Zo5dX'></tfoot><dl id='Zo5dX'><fieldset id='Zo5dX'></fieldset></dl></div>
                • 本文介紹了PHP mysql_stmt::fetch() 導(dǎo)致 PHP 致命錯(cuò)誤內(nèi)存耗盡的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

                  問題描述

                  CentOS 6.4 PHP 5.3.3 MySQL 5.1.69 x86_64

                  CentOS 6.4 PHP 5.3.3 MySQL 5.1.69 x86_64

                  mysql_stmt::fetch()
                  

                  當(dāng)使用準(zhǔn)備好的語句執(zhí)行 fetch 時(shí),PHP 產(chǎn)生錯(cuò)誤:PHP Fatal error: Allowed memory size of 134217728 bytes expired (試圖分配 4294967296 字節(jié)).

                  When executing fetch using a prepared statement, PHP yields error: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4294967296 bytes).

                  當(dāng)用于創(chuàng)建臨時(shí)表的 SELECT 語句中包含的變量未設(shè)置時(shí),無論是否在調(diào)用存儲(chǔ)過程之前在環(huán)境中設(shè)置了該變量,都會(huì)發(fā)生這種情況.該變量必須在存儲(chǔ)過程中設(shè)置.當(dāng)使用SELECT語句將臨時(shí)表中的數(shù)據(jù)返回給PHP,而PHP使用mysql_stmt::fetch()訪問數(shù)據(jù)時(shí),PHP產(chǎn)生上述致命錯(cuò)誤.

                  This occurs when a variable included in a SELECT statement used to create a temporary table is unset, whether or not the variable is otherwise set in the environment before the stored procedure is called. The variable must be set within the stored procedure. When a SELECT statement is used to return data in the temporary table to PHP, and PHP uses mysql_stmt::fetch() to access the data, PHP generates the above fatal error.

                  MySQL 代碼:

                  DELIMITER $$
                  CREATE PROCEDURE test_sp()
                  BEGIN
                  
                      # uncomment below line, and PHP call to mysqli_stmt::fetch() works
                      # SET @status = 1;
                  
                      # remove tmp table
                      DROP TABLE IF EXISTS tmp_table;
                      # CREATE TEMPORARY TABLE
                      CREATE TEMPORARY TABLE tmp_table
                          SELECT @status AS status;
                  
                      SELECT * FROM tmp_table;
                  
                  END $$
                  DELIMITER ;
                  

                  PHP 代碼:

                  // obtain MySQL login info
                  require_once(MYSQLOBJ);
                  
                  // initialize status
                  $status = "";
                  
                  
                  $db = new mysqli(
                      DB_HOST,
                      DB_USER,
                      DB_PASSWORD,
                      DB_NAME
                      );
                  
                  
                  $query = "CALL test_sp";
                  
                  $stmt = $db->prepare($query);
                  
                  $stmt->execute();
                  
                  $stmt->bind_result( $status );
                  
                  $stmt->store_result();
                  
                  $stmt->fetch(); // PHP FATAL ERROR OCCURS HERE
                  
                  $stmt->free_result();
                  
                  $db->close();
                  
                  print "<p>status = $status</p>
                  ";
                  

                  推薦答案

                  你會(huì)發(fā)現(xiàn)這@statusNULL 時(shí)發(fā)生> 或一個(gè)字符串.

                  You will find that this is occurring only when @status is NULL or a string.

                  問題是雙重的:

                  1. 與局部變量不同,MySQL 用戶變量支持非常有限的一組數(shù)據(jù)類型:

                  1. Unlike local variables, MySQL user variables support a very limited set of datatypes:

                  可以從一組有限的數(shù)據(jù)類型中為用戶變量分配一個(gè)值:整數(shù)、十進(jìn)制、浮點(diǎn)、二進(jìn)制或非二進(jìn)制字符串,或者 NULL 值.

                  User variables can be assigned a value from a limited set of data types: integer, decimal, floating-point, binary or nonbinary string, or NULL value.

                  文檔沒有提到使用的實(shí)際數(shù)據(jù)類型分別是BIGINTDECIMAL(65,30)DOUBLELONGBLOBLONGTEXTLONGBLOB.關(guān)于最后一個(gè),手冊至少做了解釋:

                  The documentation fails to mention that the actual datatypes used are respectively BIGINT, DECIMAL(65,30), DOUBLE, LONGBLOB, LONGTEXT and LONGBLOB. Regarding the last one, the manual does at least explain:

                  如果你引用一個(gè)沒有被初始化的變量,它的值是NULL,類型是字符串.

                  If you refer to a variable that has not been initialized, it has a value of NULL and a type of string.

                  前三種數(shù)據(jù)類型的存儲(chǔ)(即整數(shù)、十進(jìn)制和浮點(diǎn)值)分別需要 8、30 和 8 個(gè)字節(jié).其他數(shù)據(jù)類型(即字符串和 NULL 值)需要(最多)4 GB 的存儲(chǔ)空間.

                  Storage of the first three of these datatypes (i.e. for integer, decimal and floating-point values) require 8, 30 and 8 bytes respectively. The other datatypes (i.e. for string and NULL values) require (up to) 4 gigabytes of storage.

                  由于您使用的是 v5.4.0 之前的 PHP 版本,因此默認(rèn)的 MySQL 驅(qū)動(dòng)程序是 libmysql,在數(shù)據(jù)綁定時(shí)只有列類型元數(shù)據(jù)可從服務(wù)器獲得——因此 MySQLi 嘗試分配足夠的內(nèi)存來保存每個(gè)可能的值(即使最終不需要完整的緩沖區(qū));因此,NULL- 和字符串值的用戶變量(最大可能大小為 4GiB)導(dǎo)致 PHP 超出其默認(rèn)內(nèi)存限制(自 PHP v5.2.0 起為 128MiB).

                  Since you are using a version of PHP prior to v5.4.0, the default MySQL driver is libmysql, with which only column type metadata is available from the server upon data binding—so MySQLi attempts to allocate sufficient memory to hold every possible value (even if the full buffer is not ultimately required); thus NULL- and string-valued user variables, which have a maximum possible size of 4GiB, cause PHP to exceed its default memory limit (of 128MiB since PHP v5.2.0).

                  您的選擇包括:

                  • 覆蓋表定義中的列數(shù)據(jù)類型:

                  • Overriding the column datatype in the table definition:

                  DROP TEMPORARY TABLE IF EXISTS tmp_table;
                  CREATE TEMPORARY TABLE tmp_table (
                    status VARCHAR(2)
                  ) SELECT @status AS status;
                  

                • 顯式強(qiáng)制轉(zhuǎn)換用戶變量到更具體的數(shù)據(jù)類型:

                • Explicitly casting the user variable to a more specific datatype:

                  DROP TEMPORARY TABLE IF EXISTS tmp_table;
                  CREATE TEMPORARY TABLE tmp_table
                    SELECT CAST(@status AS CHAR(2)) AS status;
                  

                • 使用以顯式數(shù)據(jù)類型聲明的局部變量:

                • Using local variables, which are declared with an explicit datatype:

                  DECLARE status VARCHAR(2) DEFAULT @status;
                  DROP TEMPORARY TABLE IF EXISTS tmp_table;
                  CREATE TEMPORARY TABLE tmp_table
                    SELECT status;
                  

                • 通過調(diào)用 mysqli_stmt::store_result() before mysqli_stmt::bind_result(),這會(huì)導(dǎo)致結(jié)果集存儲(chǔ)在 libmysql 中(在 PHP 內(nèi)存之外限制),然后 PHP 將僅在獲取記錄時(shí)分配保存記錄所需的實(shí)際內(nèi)存:

                • Working around the issue by calling mysqli_stmt::store_result() before mysqli_stmt::bind_result(), which causes the resultset to be stored in libmysql (outside of PHP's memory limits) and then PHP will only allocate the actual memory required to hold the record upon fetching it:

                  $stmt->execute();
                  $stmt->store_result();
                  $stmt->bind_result( $status );
                  $stmt->fetch();
                  

                • 提高 PHP 的內(nèi)存限制它可以適應(yīng) 4GiB 緩沖區(qū)的分配(盡管人們應(yīng)該意識(shí)到這樣做對硬件資源的影響)——例如,完全消除內(nèi)存限制(盡管要意識(shí)到這樣做的潛在負(fù)面影響,例如來自真正的內(nèi)存泄漏):

                • Raising PHP's memory limit so that it can accomodate the allocation of 4GiB buffers (although one should be aware of the implications on hardware resources from doing so)—for example, to remove the memory constraints entirely (although be aware of potential negative side-effects from doing this, e.g. from genuine memory leaks):

                  ini_set('memory_limit', '-1');
                  

                • 重新編譯PHP,配置為使用原生mysqlnd驅(qū)動(dòng)(自 v5.3.0 起包含在 PHP 中,但在 PHP v5.4.0 之前未配置為默認(rèn)值)而不是 libmysql:

                • Recompiling PHP, configured to use the native mysqlnd driver (included with PHP since v5.3.0, but not configured as the default until PHP v5.4.0) instead of libmysql:

                  ./configure --with-mysqli=mysqlnd
                  

                • 升級到 PHP v5.4.0 或更高版本,以便默認(rèn)使用 mysqlnd.

                • Upgrading to PHP v5.4.0 or later so that mysqlnd is used by default.

                  這篇關(guān)于PHP mysql_stmt::fetch() 導(dǎo)致 PHP 致命錯(cuò)誤內(nèi)存耗盡的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

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

                  store_result() and get_result() in mysql returns false(mysql 中的 store_result() 和 get_result() 返回 false)
                  Call to undefined function mysqli_result::num_rows()(調(diào)用未定義的函數(shù) mysqli_result::num_rows())
                  PHP Prepared Statement Problems(PHP 準(zhǔn)備好的語句問題)
                  mysqli_fetch_array returning only one result(mysqli_fetch_array 只返回一個(gè)結(jié)果)
                  PHP MySQLi Multiple Inserts(PHP MySQLi 多次插入)
                  How do I make sure that values from MySQL keep their type in PHP?(如何確保 MySQL 中的值在 PHP 中保持其類型?)
                  • <bdo id='jUPIk'></bdo><ul id='jUPIk'></ul>
                    <tfoot id='jUPIk'></tfoot>

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

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

                              <tbody id='jUPIk'></tbody>

                          • 主站蜘蛛池模板: 欧美精品一区在线发布 | 秋霞国产 | 91电影| 中文亚洲字幕 | 免费特黄视频 | www国产精品 | 国产中文字幕av | av中文字幕在线观看 | 日本午夜精品 | 亚洲综合热 | 欧美视频二区 | 亭亭五月激情 | 91免费在线视频 | 天天天操 | 欧美一区二区在线免费观看 | 国产精品中文字幕在线 | 国产区视频在线观看 | 日日操操 | 久久久久国产 | 久久久www成人免费精品 | jizjizjiz中国护士18 | 美女久久久久 | 精品一区二区三区视频在线观看 | 99精品视频免费在线观看 | 高清人人天天夜夜曰狠狠狠狠 | 天天拍天天操 | 欧美综合一区 | 国产伦精品一区二区三区四区视频 | 在线午夜 | 伊人色综合久久久天天蜜桃 | www视频在线观看 | 国产一区二区三区四区三区四 | 丁香一区二区 | 欧美精品在线播放 | 日韩1区| 狠狠色狠狠色综合日日92 | 色综合天天天天做夜夜夜夜做 | 国产高清免费 | 免费在线一区二区 | 男女下面一进一出网站 | 综合色播|