如何在Joomla中使用准备好的语句?

问题描述 投票:6回答:1

如何在joomla模型中使用Prepare方法?例如在pdo中,我们使用:

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

如何在Joomla中完成!

joomla
1个回答
6
投票

在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的更新:

据我所知,Joomla 4支持准备好的语句。我不确定是否会将其反向移植到Joomla3.x。这是我已模拟但未测试的内容:

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

    // Your data
    $city = 'London';
    $date = '21/01/2020';
    $uid = 1234;
    $title = 'My Title';

    // Prepared query
    $db = Factory::getDbo();
    $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();
© www.soinside.com 2019 - 2024. All rights reserved.