为什么截断表在 Joomla 3.7 中不起作用?



我有以下代码试图截断一个表。Joomla文档让我相信这会奏效,但事实并非如此。我错过了什么?

$db = JFactory::getDbo();
truncate_query = $db->getQuery(true);
//$truncate_query = 'TRUNCATE ' . $db->quoteName('#__mytable');
$truncate_query->truncateTable($db->quoteName('#__mytable'));
$db->setQuery($truncate_query);
echo $truncate_query;
exit();

如果我使用注释掉的行手动生成SQL,它确实有效。我仍然希望使用truncateTable函数的原因是,我试图将截断包含在事务中。当我使用手动语句时,即使事务的另一部分失败,表仍然会被截断,这很烦人,因为其他语句依赖于被截断的数据,所以如果表在不应该被清空的时候被清空,那么就没有数据可以再次运行事务了。很烦人!

以下是如何调用/执行截断查询:

JFactory::getDbo()->truncateTable('#__mytable');

现在有更多细节。。。

以下是Joomla源代码中方法的代码块:

public function truncateTable($table)
{
$this->setQuery('TRUNCATE TABLE ' . $this->quoteName($table));
$this->execute();
}

正如您所看到的,truncateTable()方法需要一个表名作为其唯一参数的字符串;您提供了一个backtick-wrapped字符串,但是该方法已经提供了backtick-wrapped服务。(即使你去掉了你的支持,你的方法也不会成功。(

setQuery()execute()调用已经在方法内部,因此您不需要创建新的查询对象,也不需要手动执行任何操作。

该方法中没有返回,因此返回默认的null——因此,您的$truncate_query变为null。当你尝试execute(null)时,你什么也得不到——甚至连一条错误消息都没有。

如果您想知道删除了多少行,则需要在手动计数行之前运行SELECT查询。

如果要确保没有剩余的数据行,则需要调用SELECT并检查是否有零行数据。

这是我对你的JSX问题的回答(用不同的措辞(。

相关内容

  • 没有找到相关文章

最新更新