Я создал тестовую базу данных следующим образом:PHP параметры хранимых процедур
USE test;
DROP TABLE IF EXISTS test;
DROP PROCEDURE IF EXISTS testparams;
CREATE TABLE test
(
inparm INT,
inoutparam INT,
outparm INT
);
INSERT INTO test VALUES (0, 0, 0);
DELIMITER $$
CREATE PROCEDURE testparams(IN i INT, INOUT io INT, OUT o INT)
BEGIN
UPDATE test SET inoutparm = io + 1, outparm = FLOOR(RAND() * 1000)
WHERE inparm = i;
SELECT outparm INTO o FROM test WHERE inparm = i;
SELECT inoutparam INTO io FROM test WHERE inparm = i;
END $$
Я также получил PHP скрипт:
<?php
$c = new mysqli('localhost', 'test', 'test', 'test') or die('Cannot connect');
echo "Connected\n";
$in = 0;
$out = -1;
$inout = 3;
echo "In: $in Out: $out: Inout: $inout\n";
$s = $c->prepare('CALL testparams(?, ?, ?)') or die('Unable to prepare: ' . $c->error);
$s->bind_param('iii', $in, $inout, $out);
#$s->bind_result($out, $inout);
$s->execute();
echo "After execute SP\nIn: $in Out: $out: Inout: $inout\n";
echo "End of SP\n";
$s = $c->prepare('SELECT inparm, inoutparam, outparm FROM test');
# $s->bind_result($in, $inout, $out); - Get a error here
$s->execute();
while ($s->fetch())
{
echo "In: $in Out: $out: Inout: $inout\n";
}
?>
Моя проблема заключается в том, что хранимая процедура не кажется, называется. Это связано с использованием параметров OUT
и INOUT
? Если да, то как вы используете эти параметры с PHP?
Это демонстрируется с помощью сценария, создающего следующий вывод
Connected
In: 0 Out: -1: Inout: 3
End of SP
In: 0 Out: 0: Inout: 0
Возможно, вы имели в виду SELECT inoutparam INTO io FROM test WHERE inparm = i; где это INTO io, а не INTO o. – ckim
Спасибо - Сделано изменение - Моя ошибка. Но все равно не работает. –