За последние 24 часа нас посетили 34230 программистов и 1693 робота. Сейчас ищут 667 программистов ...

Хранимая функция MySQL сервера

Тема в разделе "PHP для новичков", создана пользователем Зингер, 24 окт 2017.

  1. Зингер

    Зингер Активный пользователь

    С нами с:
    20 июл 2017
    Сообщения:
    127
    Симпатии:
    7
    Сделал, ну очень простую фун-цию
    Код (Text):
    1. CREATE DEFINER = 'root'@'%'
    2. FUNCTION BGHM.proba_function1(Param1 INT)
    3.   RETURNS char(255) CHARSET utf8
    4. BEGIN
    5. DECLARE val1 char(255);
    6. SELECT 'Получилось!' INTO val1;
    7.  
    8. RETURN val1;
    9. END
    Вызов:
    PHP:
    1. public function proba_function(){
    2.         $value1=100;
    3.         $stmt=$this->obj_podkl->prepare('select proba_function1(:value1) as prizn1');
    4.         $stmt->bindParam(':value1',$value1,PDO::PARAM_INT);
    5.         $stmt->execute();
    6.         while($row=$stmt->fetch()){
    7.             echo $row['prizn1'];
    8.         }
    9.     }
    Результата нет. В чем дело?
     
  2. Griffter

    Griffter Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    92
    Симпатии:
    25
    Потому что у вас ошибка в запросе. К какой таблице вы обращаетесь? Посмотрите документацию, какой синтаксис имеет запрос SELECT...
     
  3. Зингер

    Зингер Активный пользователь

    С нами с:
    20 июл 2017
    Сообщения:
    127
    Симпатии:
    7
    from в select-е не обязательно указывать. Наберите Select 2+3.
     
  4. Griffter

    Griffter Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    92
    Симпатии:
    25
    Допустим. Смотри какую ошибку тебе выводит, $db->errorInfo() тебе в помощь.
     
  5. Зингер

    Зингер Активный пользователь

    С нами с:
    20 июл 2017
    Сообщения:
    127
    Симпатии:
    7
    А ничего. Запрос отрабатывается без ошибок. Вот как бы посмотреть, какой запрос приходит на сервак.
     
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
  7. Зингер

    Зингер Активный пользователь

    С нами с:
    20 июл 2017
    Сообщения:
    127
    Симпатии:
    7
    @Sail, фразу "Хранимая процедура" я вообще не употреблял. Речь идет о хранимой ФУНКЦИИ(!), которая вызывается НЕ из PHP(PDO), а уже в запросе SQL.
    Еще раз НЕ ПРОЦЕДУРА, а ФУНКЦИЯ.
    На SQL SERVER, я проделывал подобное 100500 раз, и это ускоряет получение результата, т.к. коду на клиенте нет необходимости дополнительно обрабатывать результат. На MySQL такое не прошло, поэтому решил создать класс с функцией на PHP, который будет обрабатывать данные с MySQL (datetime) и отображать в удобном юзеру формате.
     
  8. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Зингер, действительно, поторопился :(
    В таком случае просто проверьте на предмет: 'The user specified as a definer ('root'@'%') does not exist'
    За этим исключением приведенный Вами код получает ожидаемый результат :)
     
    Зингер нравится это.
  9. Зингер

    Зингер Активный пользователь

    С нами с:
    20 июл 2017
    Сообщения:
    127
    Симпатии:
    7
    @Sail, красавчик. ГЕ-НИ-АЛЬ-НО. Огромный респект.