下面的代码试图截断一个表。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函数的原因是,我试图在事务中包含截断。当我使用manual语句时,即使事务的另一部分失败,表仍然会被截断,这很烦人,因为其他语句依赖于被截断的数据,所以如果表在不应该被截断的时候被清空,就没有数据可以再次运行事务。很烦人!
1条答案
按热度按时间jrcvhitl1#
下面是如何调用/执行截断查询:
还有更多细节。。。
以下是joomla源代码中的方法代码块:
你可以看到
truncateTable()
方法要求表名作为其唯一参数的字符串;您提供了一个backtick Package 的字符串——但是该方法已经提供了backtick Package 服务(即使你把背勾去掉,你的方法也不会成功。)这个
setQuery()
以及execute()
调用已经在方法中,因此不需要创建新的查询对象,也不需要手动执行任何操作。方法中没有返回值,因此默认
null
是返回的——因此,你的$truncate_query
变成null
. 当你试图execute(null)
,你什么也得不到,甚至连一条错误信息都没有。如果您想知道删除了多少行,则需要运行
SELECT
先查询后计算行数。如果要确保没有剩余的数据行,则需要调用
SELECT
并检查零行数据。这是我对你的jsx问题的回答(用不同的措辞)。