Как вызвать функцию MySQL в Yii2?

341
08 апреля 2017, 00:51
 $command = Yii::$app->db->createCommand("SELECT func(:name)")
                ->queryScalar([':name' => $name_f]);

Пытаюсь вызывать так, но выдаёт ошибку

SQLSTATE[HY093]: Invalid parameter number: no parameters were bound The SQL being executed was: SELECT func(:name FROM film)'

Где func - имя функции, name - поле в таблице БД, name_f - данные, записываемые в БД.

Сама функция:

DROP FUNCTION IF EXISTS func;
DELIMITER $$;
CREATE FUNCTION func(nameFilm varchar(200)) 
RETURNS INT 
language sql
BEGIN
    declare countRow INT default 0;
    DECLARE idRow INT DEFAULT 0;
    SELECT count(*), id INTO countRow, idRow
    FROM `film`
    WHERE `name` LIKE nameFilm
    GROUP BY name;
    IF countRow > 0 THEN
        UPDATE `film` SET name = nameFilm WHERE id = idRow; 
    ELSE
        INSERT film (name) VALUES (nameFilm);
        SELECT id INTO idRow FROM film WHERE name LIKE nameFilm;
    END IF;
    RETURN idRow;
END$$;
DELIMITER ;
Answer 1

Согласно документации queryScalar() не принимает каких-либо аргументов.

Попробуйте сделать bindParam() или bindValue() (разница хорошо описана тут):

$command = Yii::$app->db->createCommand("SELECT func(:name)")
            ->bindValue(':name', $name_f)
            ->queryScalar();
READ ALSO
Как вывести только те новости, которые принадлежат к определенной категории?

Как вывести только те новости, которые принадлежат к определенной категории?

Вообщем ситуация в том, чтобы в блоке вывести только те новости, которые принадлежат к определенной категорииУже долго сижу над этим, но не могу...

266
Как получить свойства объекта?

Как получить свойства объекта?

есть такой объект

242
ElasticSearch - сортировка по расстоянию от точки

ElasticSearch - сортировка по расстоянию от точки

Я использую Elasticsearch для поиска заведений по названиюМне нужно отсортировать результаты по количеству совпадений (_score) и расстоянию до координат...

291
Проверка ряда значений через empty

Проверка ряда значений через empty

Есть задача: нужно проверить на предмет наличия значений в ряде переменныхЕсть ли какой-то "человеческий" способ или каждую нужно перебирать...

216