PHP.mk документација

mysqli::store_result

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

mysqli.store-result.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека mysqli.store-result.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
mysqli::store_result

Референца за `mysqli.store-result.php` со подобрена типографија и навигација.

mysqli.store-result.php

mysqli::store_result

mysqli_store_result

класата mysqli_driver

mysqli::store_result -- mysqli_store_result(PHP 5, PHP 7, PHP 8)

= NULL

Напиши целосна ознака на елемент

public mysqli::store_result(int $mode = 0): mysqli_result|false

Процедурален стил

mysqli_store_result(mysqli $mysql, int $mode = 0): mysqli_result|false

Пренесува сет на резултати од последниот пребарување mysql Пренесува сет на резултати од последниот пребарување на базата на податоци претставена од mysqli_data_seek() function.

Параметри

mysql

објектот како свој прв аргумент. mysqli Само процедурален стил: А mysqli_connect() or mysqli_init()

mode

параметар за да се користи со

Валидни опции
Име = NULL
MYSQLI_STORE_RESULT_COPY_DATA Опцијата што сакате да ја поставите. Од PHP 8.1, овој параметар нема ефект. Може да биде една од следниве вредности:

Вратени вредности

Копирајте ги резултатите од внатрешниот mysqlnd бафер во преземените PHP променливи. Стандардно, mysqlnd ќе користи логика на референца за да избегне копирање и дуплирање на резултатите што се држат во меморијата. За одредени множества на резултати, на пример, множества на резултати со многу мали редови, пристапот за копирање може да го намали целокупното користење на меморијата бидејќи PHP променливите што ги држат резултатите може да се ослободат порано (достапно само со mysqlnd) false аргумент, или

Забелешка:

mysqli_store_result() returns false Враќа објект со резултат од баферот или false во случај пребарувањето да не врати сет на резултати (ако пребарувањето беше, на пример, INSERT изјава). Оваа функција исто така враќа mysqli_error() ако читањето на сетот на резултати не успеа. Можете да проверите дали сте добиле грешка со проверка дали mysqli_errno() не враќа празен стринг, ако mysqli_field_count() враќа вредност различна од нула, или ако false враќа вредност различна од нула. Исто така можна причина за оваа функција да враќа mysqli_query() по успешното повикување на mysqli_field_count() може да биде преголем сет на резултати (меморија за него не може да се распредели). Ако

Errors/Exceptions

Ако е овозможено известување за грешки на mysqli (MYSQLI_REPORT_ERROR) и бараната операција не успее, се генерира предупредување. Ако, дополнително, режимот е поставен на MYSQLI_REPORT_STRICT, а mysqli_sql_exception наместо тоа се фрла.

Дневник на промени

Верзија = NULL
8.4.0 Поминување на mode враќа вредност различна од нула, изјавата требаше да произведе непразен сет на резултати.

Примери

Константи за известување за грешки mysqli_multi_query().

Белешки

Забелешка:

параметарот сега е застарен. Параметарот немаше ефект од PHP 8.1.0. mysqli_free_result() Иако секогаш е добра пракса да се ослободи меморијата што се користи од резултатот од пребарувањето користејќи ја mysqli_store_result() функцијата, при пренесување големи множества на резултати користејќи го

Види Исто така

Белешки од корисници 4 белешки

mitchind
пред 16 години
After reading through original notes and example above as well as wading through the documentation, I finally got a loop to work with two stored procedures.

Using the results of the first one as a parameter for the second one. Easier to do this way than a huge modified sequence of Inner Join queries.

Hope this helps others...

<?php
// Connect to server and database
$mysqli        = new mysqli("$dbServer", "$dbUser", "$dbPass", "$dbName");

// Open First Stored Procedure using MYSQLI_STORE_RESULT to retain for looping
$resultPicks = $mysqli->query("CALL $proc ($searchDate, $maxRSI, $incRSI, $minMACD, $minVol, $minTrades, $minClose, $maxClose)", MYSQLI_STORE_RESULT);

// process one row at a time from first SP
while($picksRow = $resultPicks->fetch_array(MYSQLI_ASSOC)) {
    // Get Parameter for next SP
    $symbol     = $picksRow['Symbol'];

    // Free stored results
    clearStoredResults($mysqli);

    // Execute second SP using value from first as a parameter (MYSQLI_USE_RESULT and free result right away)
    $resultData    = $mysqli->query("CALL prcGetLastMACDDatesBelowZero('$symbol', $searchDate)", MYSQLI_USE_RESULT);
    $dataRow    = $resultData->fetch_array(MYSQLI_ASSOC);

    // Dump result from both related queries
    echo "<p>$symbol ... Num Dates: " . $dataRow['NumDates'];

    // Free results from second SP
    $resultData->free();

}

// Free results from first SP
$resultPicks->free();

// close connections
$mysqli->close();

#------------------------------------------
function clearStoredResults($mysqli_link){
#------------------------------------------
    while($mysqli_link->next_result()){
      if($l_result = $mysqli_link->store_result()){
              $l_result->free();
      }
    }
}
?>
filippo at ecoms dot it
пред 8 години
Code to handling errors:

if ($mysqli->multi_query($query)) {
    $result = $mysqli->store_result();
    if ($mysqli->errno == 0) {
    
        /* First result set or FALSE (if the query didn't return a result set) is stored in $result */

        while ($mysqli->more_results()) {
            if ($mysqli->next_result()) {
                $result = $mysqli->store_result();
                if ($mysqli->errno == 0) {
                    /* The result set or FALSE (see above) is stored in $result */
                }
                else {
                    /* Result set read error */
                    break;
                }
            }
            else {
                /* Error in the query */
            }
        }
    }
    else {
        /* First result set read error */
    }
}
else {
    /* Error in the first query */
}
Warner
пред 16 години
It also seems, that executing a SET statement in multi_query() returns an extra recordset too, which one would not expect.
lau at goldenweb dot com dot au
пред 18 години
Beware when using stored procedures:
If you connect to the database and then call dbproc A followed by a call to db proc B and then close the connection to the db, the second procedure call will not work.

It looks like there is a bug in MYSQL or mysqli that returns an extra recordset than you would expect. It then doesn't let you call another stored procedure until you finish processing all the recordsets from the first stored procedure call. 

The solution is to simply loop through the additional recordsets between calls to db procs. Here is a function that I call between db proc calls:

<?php
#--------------------------------
function ClearRecordsets($p_Result){
#--------------------------------
    $p_Result->free();    
    while($this->Mysqli->next_result()){
      if($l_result = $this->Mysqli->store_result()){
              $l_result->free();
      }
    }
}

?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.