繁体   English   中英

为什么truncateTable在Joomla 3.7中不起作用?

[英]Why won't truncateTable work in 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()方法期望将表名作为唯一参数的字符串。 您正在提供反引号包装的字符串-但该方法已经提供了反引号包装的服务。 (即使删除了反引号,您的方法也不会成功。)

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

方法中没有返回值,因此将返回默认的null ,因此, $truncate_query变为null 当您尝试execute(null) ,您什么也没得到-甚至没有错误消息。

如果您想知道删除了多少行,则需要先运行SELECT查询才能对行进行计数。

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

这是对JSX问题的回答 (用不同的措词)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM