За последние 24 часа нас посетили 22687 программистов и 1212 роботов. Сейчас ищут 742 программиста ...

Хранимые процедуры mysql и php

Тема в разделе "MySQL", создана пользователем Ded Karnilo, 30 янв 2007.

  1. Ded Karnilo

    Ded Karnilo Активный пользователь

    С нами с:
    21 дек 2006
    Сообщения:
    31
    Симпатии:
    0
    Народ как вызвать из php хранимые процедуры или функции mysql, и чтобы после вызова результат передовался в переменные php????
     
  2. Anonymous

    Anonymous Guest

    эх.... куда бы переместить то? До MySQL не тянет... чуть лучше блондинок...ладно, все таки MySQL
     
  3. Anonymous

    Anonymous Guest

    1.А как вы обычно получаете данные из MySQL ?
    2.А как вы исрользуете процедуры внутри MySQL не для PHP?
     
  4. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    select
    mysql_fetch_row
    :p
     
  5. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    vb

    скорее array / accos.. имхо удобнее) хотя, нет, mysql_fetch_object - он лучший:)
     
  6. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    DarkElf, в случаях, когда выборка ведется нормальных полей, я всегда использую assoc, 440Hz кстати любительобжекта :).
    Но когда выборка ведется дурных значений лучше юзать row, так же как
    SELECT COUNT(id) ....
    при row результат будет в $row[0] или если исподльзовать list, то list($count) = mysql_fetch_row($result) результат будет в $count :p
    при assoc результат будет в $row['COUNT(id)'] и list заюзать нельзя
    и что же удобнее?
     
  7. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    AS count
    +
    extarct($row);
     
  8. Ded Karnilo

    Ded Karnilo Активный пользователь

    С нами с:
    21 дек 2006
    Сообщения:
    31
    Симпатии:
    0
    Не народ, выборку это понятно все как зделать на php я имею ввиду функция выборки зделана как процедура mysql и выполняется на mysql сервере, а не php запросом.
    *********************
    $SQL = mysql_query("SELECT id FROM online WHERE room=1");
    $worker = mysql_num_rows($SQL);
    вот этот код это понятно обычное обращение с помощью php к mysql базе, но хранимые процедуры они находятся на серваке mysql и когда она выполняется результат ее надо передать в php? а поумолчанию он остается на серваке.
    вот пример я создаю на mysql следующее:
    delimiter //
    CREATE PROCEDURE simpleproc (OUT param1 INT)
    BEGIN
    SELECT COUNT(*) INTO param1 FROM t;
    END;
    Как мне зделать чтобы из php ее запустить, а не писать ее запросом php??
     
  9. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    vb

    count(*) AS count_result

    мне так проще..
    обращаясь по именам, можно потом в любой последовательности модифицировать перечисления возвратов в запросе, и нигде ничего не поедет)
     
  10. Ded Karnilo

    Ded Karnilo Активный пользователь

    С нами с:
    21 дек 2006
    Сообщения:
    31
    Симпатии:
    0
    Может я не правельно конечно выражаю мысль свою, вот по научному пишу.

    Хранимые процедуры представляют собой набор команд SQL, которые могут компилироваться и храниться на сервере. Таким образом, вместо того, чтобы хранить часто используемый запрос, клиенты могут ссылаться на соответствующую хранимую процедуру. Это обеспечивает лучшую производительность, поскольку данный запрос должен анализироваться только однажды и уменьшается трафик между сервером и клиентом. Концептуальный уровень можно также повысить за счет создания на сервере библиотеки функций.
    Хранимые программы (процедуры и функции) поддерживаются в MySQL 5.0. Хранимые процедуры – набор SQL-выражений, который может быть сохранен на сервере. Как только это сделано, клиенту уже не нужно повторно передавать запрос, а требуется просто вызвать хранимую программу.
    Это может быть полезным тогда, когда:
    • многочисленные приложения клиента написаны в разных языках или работают на других платформах, но нужно использовать ту же базу данных операций
    • безопасность на 1 месте
    Хранимые процедуры и функции (подпрограммы) могут обеспечить лучшую производительность потому, что меньше информации требуется для пересылки между клиентом и сервером. Выбор увеличивает нагрузку на сервер БД, но снижает затраты на стороне клиента. Используйте это, если много клиентских машин (таких как Веб-серверы) обслуживаются одной или несколькими БД.

    И вот я понял как это зделать на серваке mysql а как совместить чтоб результат передовался в php незнаю.
     
  11. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    мм, в каком-то из мануалов встретил..

    mysql_query("call имя_процедуры");

    не проверял..

    также учитывай, что работают хранимые процедуры только в mysql5
     
  12. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    ИМХО не красиво. Если юзать as count то по моему достаточно assoc (не люблю extract - это плохая функция).
    А если сильно хочется вынести в переменные то row + list = assoc + extract, только list - это безопаснее (контролируемее) чем extract
     
  13. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    extract же не GET / POST /.. переменных, а "своих"
     
  14. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Ti, например у тебя в коде используется переменная $sum, далее в какой то момент ты вспоминаешь что в каком, то запросе тебе нужно дописать к селекту sum, и получается что легко по неосмотрительности перетираешь используемую переменную $sum
     
  15. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
  16. Ded Karnilo

    Ded Karnilo Активный пользователь

    С нами с:
    21 дек 2006
    Сообщения:
    31
    Симпатии:
    0
    Народ всеравно туплю, вот смотрите есть процедура:
    CREATE PROCEDURE `simpleproc`()
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT ''
    BEGIN
    select * from users where id=1;
    END;

    делаю в php вызов:
    $res = mysql_query("CALL simpleproc()");
    далее по идее в переменной $res должны быть данные, я так понял что потом надо делать $q = mysql_fetch_array($res); есле так то почему выдается ошибка при выполнении "$q = mysql_fetch_array($res);" ???? где я прогнал подскажите плиз.
     
  17. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Ded Karnilo, много где мог "прогнать" :).
    Попробуй так и скажи что за ошибка
    $res = mysql_query("CALL simpleproc()") or die(mysql_error());
     
  18. Ded Karnilo

    Ded Karnilo Активный пользователь

    С нами с:
    21 дек 2006
    Сообщения:
    31
    Симпатии:
    0
    вот че пишет
    PROCEDURE game.simpleproc can't return a result set in the given context
     
  19. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Ded Karnilo, эээ.... вечером установлю себе 5-й mysql посмотрю.
     
  20. Ded Karnilo

    Ded Karnilo Активный пользователь

    С нами с:
    21 дек 2006
    Сообщения:
    31
    Симпатии:
    0
    Окей буду ждать если сам допру вчет трабла напишу :)!
     
  21. Ded Karnilo

    Ded Karnilo Активный пользователь

    С нами с:
    21 дек 2006
    Сообщения:
    31
    Симпатии:
    0
    Ну как народ у кого получилось это реализовать или нет????? я так и не смог чето!
     
  22. Ded Karnilo

    Ded Karnilo Активный пользователь

    С нами с:
    21 дек 2006
    Сообщения:
    31
    Симпатии:
    0
    Ну спасибо что нечего не подсказали но я нашол как это делать, выкладываю мож кому понадобится!!!
    PHP:
    1. <?
    2. $link = mysqli_init();
    3. mysqli_options($link, MYSQLI_INIT_COMMAND, "SET AUTOCOMMIT=0");
    4. mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5);
    5.  
    6. mysqli_real_connect($link, $hostname, $username, $password, $dbName);    
    7.  
    8. {
    9.    printf("Connect failed: %s\n", mysqli_connect_error());
    10.    exit();
    11. }
    12.  
    13.   $som = 1;
    14.   $query = "CALL simpleproc()";
    15.  
    16. if (mysqli_real_query($link,$query))
    17. {
    18.  if ($result2 = mysqli_store_result($link))
    19.  {
    20.    while ($row = mysqli_fetch_assoc($result2))
    21.    {
    22. $q = $row["login"];
    23.        echo "$q";
    24.    }
    25.  
    26.  }
    27. }
    28.  
    29.  
    30. mysqli_close($link);  
    31.  
    32. ?>
     
  23. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    в такую засаду только в детском саде попадал