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

Зачувани процедури

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

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

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

mysqli.quickstart.stored-procedures.php

Зачувани процедури

The MySQL database supports stored procedures. A stored procedure is a subroutine stored in the database catalog. Applications can call and execute the stored procedure. The CALL MySQL базата на податоци поддржува складирани процедури. Складирана процедура е подпрограма зачувана во каталогот на базата на податоци. Апликациите можат да ја повикаат и извршат складираната процедура.

Параметар

SQL изјавата се користи за извршување на складирана процедура. IN, INOUT and OUT Складираните процедури можат да имаат

параметри, во зависност од верзијата на MySQL. mysqli интерфејсот нема посебна нотација за различните видови параметри.

IN параметар CALL Влезните параметри се обезбедени со

изјава. Ве молиме, проверете дали вредностите се правилно избегнати.

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");

$mysqli->query("DROP TABLE IF EXISTS test");
$mysqli->query("CREATE TABLE test(id INT)");

$mysqli->query("DROP PROCEDURE IF EXISTS p");
$mysqli->query("CREATE PROCEDURE p(IN id_val INT) BEGIN INSERT INTO test(id) VALUES(id_val); END;");

$mysqli->query("CALL p(1)");

$result = $mysqli->query("SELECT id FROM test");

var_dump($result->fetch_assoc());

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

array(1) {
  ["id"]=>
  string(1) "1"
}

Пример #1 Повикување на складирана процедура

INOUT/OUT параметар INOUT/OUT Вредностите на

параметрите се пристапуваат со користење на сесиски променливи.

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");

$mysqli->query("DROP PROCEDURE IF EXISTS p");
$mysqli->query('CREATE PROCEDURE p(OUT msg VARCHAR(50)) BEGIN SELECT "Hi!" INTO msg; END;');

$mysqli->query("SET @msg = ''");
$mysqli->query("CALL p(@msg)");

$result = $mysqli->query("SELECT @msg as _p_out");

$row = $result->fetch_assoc();
echo
$row['_p_out'];

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

Hi!

Пример #2 Користење на сесиски променливи

Развивачите на апликации и рамки можеби ќе можат да обезбедат поудобен API користејќи мешавина од сесиски променливи и инспекција на каталогот на базата на податоци. Сепак, ве молиме имајте предвид можното влијание на перформансите на прилагодено решение базирано на инспекција на каталогот.

Ракување со множества резултати mysqli::__construct()ќе треба да се прилагоди, и mysqli::__construct() Складираните процедури можат да вратат множества резултати. Множествата резултати вратени од складирана процедура не можат правилно да се преземат со користење на mysqli::__construct() функцијата комбинира извршување на изјавата и преземање на првото множество резултати во тампонирано множество резултати, ако има. Сепак, постојат дополнителни множества резултати од складирани процедури скриени од корисникот што предизвикуваат

да не успее враќајќи ги очекуваните множества резултати од корисникот. Множествата резултати вратени од складирана процедура се преземаат со користење на or - Проверете дали има повеќе резултати од прашање од повеќекратно прашањеmysqli::real_query() CALL. Failing to fetch all result sets returned by a stored procedure causes an error.

. Неуспешното преземање на сите множества резултати вратени од процедура за складирање предизвикува грешка.

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");

$mysqli->query("DROP TABLE IF EXISTS test");
$mysqli->query("CREATE TABLE test(id INT)");
$mysqli->query("INSERT INTO test(id) VALUES (1), (2), (3)");

$mysqli->query("DROP PROCEDURE IF EXISTS p");
$mysqli->query('CREATE PROCEDURE p() READS SQL DATA BEGIN SELECT id FROM test; SELECT id + 1 FROM test; END;');

$mysqli->multi_query("CALL p()");

do {
if (
$result = $mysqli->store_result()) {
printf("---\n");
var_dump($result->fetch_all());
$result->free();
}
} while (
$mysqli->next_result());

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

---
array(3) {
  [0]=>
  array(1) {
    [0]=>
    string(1) "1"
  }
  [1]=>
  array(1) {
    [0]=>
    string(1) "2"
  }
  [2]=>
  array(1) {
    [0]=>
    string(1) "3"
  }
}
---
array(3) {
  [0]=>
  array(1) {
    [0]=>
    string(1) "2"
  }
  [1]=>
  array(1) {
    [0]=>
    string(1) "3"
  }
  [2]=>
  array(1) {
    [0]=>
    string(1) "4"
  }
}

Пример #3 Преземање резултати од процедури за складирање

Користење на подготвени изјави CALL Не е потребно посебно ракување при користење на интерфејсот за подготвени изјави за преземање резултати од истата процедура за складирање како погоре. Интерфејсите за подготвени и неподготвени изјави се слични. Ве молиме имајте предвид дека не секоја верзија на MYSQL сервер може да поддржува подготовка на

SQL изјава.

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");

$mysqli->query("DROP TABLE IF EXISTS test");
$mysqli->query("CREATE TABLE test(id INT)");
$mysqli->query("INSERT INTO test(id) VALUES (1), (2), (3)");

$mysqli->query("DROP PROCEDURE IF EXISTS p");
$mysqli->query('CREATE PROCEDURE p() READS SQL DATA BEGIN SELECT id FROM test; SELECT id + 1 FROM test; END;');

$stmt = $mysqli->prepare("CALL p()");

$stmt->execute();

do {
if (
$result = $stmt->get_result()) {
printf("---\n");
var_dump($result->fetch_all());
$result->free();
}
} while (
$stmt->next_result());

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

---
array(3) {
  [0]=>
  array(1) {
    [0]=>
    int(1)
  }
  [1]=>
  array(1) {
    [0]=>
    int(2)
  }
  [2]=>
  array(1) {
    [0]=>
    int(3)
  }
}
---
array(3) {
  [0]=>
  array(1) {
    [0]=>
    int(2)
  }
  [1]=>
  array(1) {
    [0]=>
    int(3)
  }
  [2]=>
  array(1) {
    [0]=>
    int(4)
  }
}

Пример #4 Процедури за складирање и подготвени изјави

Се разбира, поддржана е и употребата на API за врзување за преземање.

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");

$mysqli->query("DROP TABLE IF EXISTS test");
$mysqli->query("CREATE TABLE test(id INT)");
$mysqli->query("INSERT INTO test(id) VALUES (1), (2), (3)");

$mysqli->query("DROP PROCEDURE IF EXISTS p");
$mysqli->query('CREATE PROCEDURE p() READS SQL DATA BEGIN SELECT id FROM test; SELECT id + 1 FROM test; END;');

$stmt = $mysqli->prepare("CALL p()");

$stmt->execute();

do {
if (
$stmt->store_result()) {
$stmt->bind_result($id_out);
while (
$stmt->fetch()) {
echo
"id = $id_out\n";
}
}
} while (
$stmt->next_result());

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

id = 1
id = 2
id = 3
id = 2
id = 3
id = 4

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

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

mysqli::more_results()
пред 6 години
<?php

// Store procedure call without params

$MyConnection = new mysqli ("DB_SERVER", "DB_USER", "DB_PASS", "DB_NAME");

mysqli_multi_query ($MyConnection, "CALL MyStoreProcedure") OR DIE (mysqli_error($MyConnection));

while (mysqli_more_results($MyConnection)) {

       if ($result = mysqli_store_result($MyConnection)) {

              while ($row = mysqli_fetch_assoc($result)) {

                     // i.e.: DBTableFieldName="userID"
                     echo "row = ".$row["DBTableFieldName"]."<br />";
                     ....

              }
              mysqli_free_result($result);
       }
       mysqli_next_result($conn);

}
?>
*******************************************************************
<?php

// Store procedure call using params

$MyConnection = new mysqli ("DB_SERVER", "DB_USER", "DB_PASS", "DB_NAME");

mysqli_query($MyConnection ,"SET @p0='".$MyParam1."'");
mysqli_query($MyConnection ,"SET @p1='".$MyParam2."'");
mysqli_multi_query ($MyConnection, "CALL MyStoreProcedure (@p0,@p1)") OR DIE (mysqli_error($MyConnection));

while (mysqli_more_results($MyConnection)) {

       if ($result = mysqli_store_result($MyConnection)) {

              while ($row = mysqli_fetch_assoc($result)) {

                     // i.e.: DBTableFieldName="userID"
                     echo "row = ".$row["DBTableFieldName"]."<br />";
                     ....

              }
              mysqli_free_result($result);
       }
       mysqli_next_result($conn);

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

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

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

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

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

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