为什么truncatable不能在joomla3.7中工作?

uz75evzq  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(352)

下面的代码试图截断一个表。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语句时,即使事务的另一部分失败,表仍然会被截断,这很烦人,因为其他语句依赖于被截断的数据,所以如果表在不应该被截断的时候被清空,就没有数据可以再次运行事务。很烦人!

jrcvhitl

jrcvhitl1#

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

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

还有更多细节。。。
以下是joomla源代码中的方法代码块:

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

你可以看到 truncateTable() 方法要求表名作为其唯一参数的字符串;您提供了一个backtick Package 的字符串——但是该方法已经提供了backtick Package 服务(即使你把背勾去掉,你的方法也不会成功。)
这个 setQuery() 以及 execute() 调用已经在方法中,因此不需要创建新的查询对象,也不需要手动执行任何操作。
方法中没有返回值,因此默认 null 是返回的——因此,你的 $truncate_query 变成 null . 当你试图 execute(null) ,你什么也得不到,甚至连一条错误信息都没有。
如果您想知道删除了多少行,则需要运行 SELECT 先查询后计算行数。
如果要确保没有剩余的数据行,则需要调用 SELECT 并检查零行数据。
这是我对你的jsx问题的回答(用不同的措辞)。

相关问题