Академический Документы
Профессиональный Документы
Культура Документы
Parmetros
Los procedimientos almacenados pueden tener parmetros IN, INOUT y OUT, dependiendo de la
versin de MySQL. La interfaz mysqli no tiene una nocin especial de los diferentes tipos de
parmetros.
Parmetro IN
Los parmetros de entrada son proporcionados con la sentencia CALL. Asegrese de que los
valores estn escapados correctamente.
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos");
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
if (!$mysqli->query("CALL p(1)")) {
echo "Fall CALL: (" . $mysqli->errno . ") " . $mysqli->error;
}
array(1) {
["id"]=>
string(1) "1"
Parmetro INOUT/OUT
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos");
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
$fila = $resultado->fetch_assoc();
echo $fila['_p_out'];
?>
Hola!
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos");
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
if (!$mysqli->multi_query("CALL p()")) {
echo "Fall CALL: (" . $mysqli->errno . ") " . $mysqli->error;
}
do {
if ($resultado = $mysqli->store_result()) {
printf("---\n");
var_dump($resultado->fetch_all());
$resultado->free();
} else {
if ($mysqli->errno) {
echo "Store failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
}
} while ($mysqli->more_results() && $mysqli->next_result());
?>
---
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"
No es necesario un trato especial al usar la interfaz de sentencias preparadas para obtener los
resultados del mismo procedimiento almacenado de arriba. Las interfaces de sentencias
preparadas y no preparadas son similares. Obserque que no todas las versioines del servidor de
MYSQL pueden soportar la preparacin de la sentencia SQL CALL.
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos");
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
if (!$sentencia->execute()) {
echo "Fall la ejecucin: (" . $sentencia->errno . ") " . $sentencia->error;
}
do {
if ($resultado = $sentencia->get_result()) {
printf("---\n");
var_dump(mysqli_fetch_all($resultado));
mysqli_free_result($resultado);
} else {
if ($sentencia->errno) {
echo "Store failed: (" . $sentencia->errno . ") " . $sentencia->error;
}
}
} while ($sentencia->more_results() && $sentencia->next_result());
?>
Por supuesto, tamibin est soportado el uso de la API de vinculacin para la obtencin.
<?php
if (!($sentencia = $mysqli->prepare("CALL p()"))) {
echo "Fall la preparacin: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!$sentencia->execute()) {
echo "Fall la ejecucin: (" . $sentencia->errno . ") " . $sentencia->error;
}
do {
$id_out = NULL;
if (!$sentencia->bind_result($id_out)) {
echo "Fall la vinculiacin: (" . $sentencia->errno . ") " . $sentencia->error;
}
while ($sentencia->fetch()) {
echo "id = $id_out\n";
}
} while ($sentencia->more_results() && $sentencia->next_result());
?>