Как использовать подготовленные заявления в Joomla?

Как использовать подготовленные заявления в Joomla?

13.03.2014 01:12:59 Просмотров 20 Источник

Как использовать методы подготовки в модели joomla?
например в pdo мы используем :

db->prepare('INSERT INTO tbl (`city`,`date`,`uid`,`title`) VALUES(:city,:date,:uid,:title)');  

Как я могу сделать это в Joomla!

У вопроса есть решение - Посмотреть?

Ответы - Как использовать подготовленные заявления в Joomla? / How to use prepared statements in Joomla?

Является ответом!
Lodder

13.03.2014 01:22:24

В Joomla вы всегда придерживаетесь API, который обслуживает поддерживаемые типы баз данных, например:

$db = JFactory::getDbo();

$query = $db->getQuery(true);
$columns = array('city', 'date', 'uid', 'title');
$values = array($db->quote('value1'), $db->quote('value2'), $db->quote('value3'), $db->quote('value4'));

// Prepare the insert query.
$query
    ->insert($db->quoteName('#__tablename')) //make sure you keep #__
    ->columns($db->quoteName($columns))
    ->values(implode(',', $values));

$db->setQuery($query);
$db->query();

и для Joomla 3.x, вы можете заменить $db->query();на $db->execute();


Обновление:

Насколько я знаю, Joomla 4 будет использовать подготовленные заявления в ядре. Вот над чем-то я поиздевался, однако так и не испытал:

    use Joomla\CMS\Factory;
    use Joomla\Database\ParameterType;

    $db = Factory::getDbo();

    // Your data
    $city = $db->quote('London');
    $date = $db->quote('21/01/2020');
    $uid = $db->quote(1234);
    $title = $db->quote('My Title');

    // Prepared query
    $query = $db->getQuery(true)
        ->insert($db->quoteName('#__tablename'))
        ->columns([
            $db->quoteName('city'),
            $db->quoteName('date'),
            $db->quoteName('uid'),
            $db->quoteName('title'),
        ])
        ->values(':city, :date, :uid, :title')
        ->bind(':city', $city, ParameterType::STRING)
        ->bind(':date', $date)
        ->bind(':uid', $uid, ParameterType::INTEGER)
        ->bind(':title', $title, ParameterType::STRING);

    $db->setQuery($query);
    $db->execute();
Закрыть X