Не могли бы вы помочь мне с хранимыми процедурами PHP 5.3 и MySQL 5.5 и библиотекой mysqli + постоянное соединение - PullRequest
0 голосов
/ 09 сентября 2011

Helo,

У меня есть хранимая процедура, которая имеет 7 параметров IN и 3 OUT.Мне нужно передать 7 параметров IN из PHP, выполнить запрос с процедурой и получить 3 параметра OUT.

Я использую mysqli с включенным режимом постоянного подключения.(Из соображений загрузки) Каков наиболее эффективный способ выполнить запрос и получить результаты?

Мне нужно что-то, что не влияет на другие параллельно выполняемые сценарии PHP, и что очищает сам результат, и это просто,

Это то, чем является мое приложение (упрощенно) (не рабочий пример, просто как бы я хотел, чтобы оно было)

$inParam1 = 'wer';
$inParam2 = 'fewf';
$inParam3 = 'dsf';
$inParam4 = 'vccv';
$inParam5 = '34t3'; 
$inParam6 = 'ter';
$inParam7 = 'ert';
$query = "CALL my_procedure('$inParam1', '$inParam2', '$inParam3', '$inParam4', '$inParam5', '$inParam6', '$inParam7', @outParam8, @outParam9, @outParam10); SELECT @outParam8, @outParam9, @outParam10;";
$result = $mysql_query($query);
list($outParam1, $outParam2, $outParam3) = mysql_fetch_array($result);
echo $outParam1; // String param #1 that my procedure returned as an OUT variable
echo $outParam2; // String param #2 that my procedure returned as an OUT variable
echo $outParam3; // String param #3 that my procedure returned as an OUT variable

Если кто-то может показать, как этот код может выглядеть в реальности, пожалуйста,пожалуйста, было бы здорово!

Я, очевидно, использую mysqli с правильным подключением, и тому подобное, но примеры, которые я нашел в Интернете, действительно сбивают с толку и кажутся неэффективными, я также волнуюсь, если это будет конфликтовать с другимиклиенты, потому что он работает как «nextResult» и другие странные функции.

Большое спасибо!

PHP 5.3, MySQL 5.5

Ответы [ 2 ]

0 голосов
/ 09 сентября 2011

Я считаю, что если вы хотите создать динамическую строку запроса, такую ​​как ваша, вам нужно поместить {} вокруг своих переменных в строке.

$ query = "CALL my_procedure ('{$ inParam1}', '{$ inParam2'}, '{$ inParam3}', '{$ inParam4}', '{$ inParam5}', '{$ inParam6}', '{$ inParam7}', @ outParam8, @ outParam9, @outParam10); SELECT @ outParam8, @ outParam9, @ outParam10; ";

0 голосов
/ 09 сентября 2011

Попробуйте посмотреть здесь. Поскольку я не слишком знаком с этим. :)

http://www.mysqltutorial.org/stored-procedures-parameters.aspx

Сначала необходимо создать запрос. Этот запрос будет затем сохранен в базе данных как вызываемая процедура. Затем позже, используя любой язык, который вы можете вызвать процедуру.

DELIMITER //  
    CREATE PROCEDURE GetUserByCountry(IN countryName VARCHAR(255))  
        BEGIN 
            SELECT name, email   
            FROM users  
            WHERE country = countryName;  
        END //  
DELIMITER ;

Тогда звоню.

CALL GetUserByCountry('mexico')

Возвращает имена всех пользователей и электронные письма, которые живут в Мексике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...