[英]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
并检查数据的零行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.