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

标签 mysql methods joomla joomla3.0 truncate

我有以下代码试图截断一个表。 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() 调用已经在方法内部,因此您无需创建新的查询对象,也无需手动执行任何操作。

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

如果您想知道删除了多少行,您需要事先运行一个 SELECT 查询来计算行数。

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

这里是 my answer (用不同的措辞)关于你的 JSX 问题。

关于mysql - 为什么 truncateTable 在 Joomla 3.7 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51403310/

相关文章:

用于将多行合并为一个的 MySQL 动态内部联接?

mysql - [Django]从文件导入数据到mysql

go - 如何从已实现的方法返回接口(interface)?

Java - 如何循环遍历 map 寻找另一个类的实例

jquery - 白线故障(25% 大小的 div)

mysql - Joomla JFactory 查询返回今天日期之后的结果

php - 使用php从mysql中获取并显示多行和多列

mysql - 如何在phpMyAdmin上导入需要300s以上的大sql文件?

ruby - 将 Ruby 方法与子类中的重写隔离开来? (像 Java 的私有(private)方法)

html - 在给定的 ul, li 中将元素居中