如何在joomla模型中使用Prepare方法?例如在pdo中,我们使用:
db->prepare('INSERT INTO tbl (`city`,`date`,`uid`,`title`) VALUES(:city,:date,:uid,:title)');
如何在Joomla中完成!
在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支持准备好的语句。我不确定是否会将其反向移植到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();