为什么 truncateTable 在 Joomla 3.7 中不起作用?
Why won't truncateTable work in Joomla 3.7?
我有以下代码试图运行分类table。 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,它确实有效。我仍然希望使用 t运行cateTable 函数的原因是我试图在事务中包含 t运行cation。当我使用手动语句时,即使事务的另一部分失败,table 仍然是 t运行cated,这很烦人,因为其他语句依赖于 t运行cated 的数据,所以如果 table 在不应该被清空时就没有数据留给 运行 再次交易。很烦人!
这是您call/execute您的 t运行cation 查询的方式:
JFactory::getDbo()->truncateTable('#__mytable');
现在有更多详细信息...
这是 Joomla 源代码中方法的代码块:
public function truncateTable($table)
{
$this->setQuery('TRUNCATE TABLE ' . $this->quoteName($table));
$this->execute();
}
如您所见,truncateTable()
方法需要一个表名作为其唯一参数的字符串;您提供的是反引号包装的字符串——但该方法已经提供了反引号包装服务。 (即使去掉反引号,您的方法也不会成功。)
setQuery()
和 execute()
调用已经在方法内部,因此您不需要创建新的查询对象,也不需要手动执行任何操作。
方法中没有 return,所以默认的 null
是 returned -- 因此,您的 $truncate_query
变成了 null
。当您尝试 execute(null)
时,您什么也得不到——甚至连错误消息都没有。
如果您想知道删除了多少行,您需要先运行一个SELECT
查询来计算行数。
如果您想确保没有剩余的数据行,您需要调用 SELECT
并检查零行数据。
这是关于你的 JSX 问题的my answer(用不同的措辞)。
我有以下代码试图运行分类table。 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,它确实有效。我仍然希望使用 t运行cateTable 函数的原因是我试图在事务中包含 t运行cation。当我使用手动语句时,即使事务的另一部分失败,table 仍然是 t运行cated,这很烦人,因为其他语句依赖于 t运行cated 的数据,所以如果 table 在不应该被清空时就没有数据留给 运行 再次交易。很烦人!
这是您call/execute您的 t运行cation 查询的方式:
JFactory::getDbo()->truncateTable('#__mytable');
现在有更多详细信息...
这是 Joomla 源代码中方法的代码块:
public function truncateTable($table) { $this->setQuery('TRUNCATE TABLE ' . $this->quoteName($table)); $this->execute(); }
如您所见,truncateTable()
方法需要一个表名作为其唯一参数的字符串;您提供的是反引号包装的字符串——但该方法已经提供了反引号包装服务。 (即使去掉反引号,您的方法也不会成功。)
setQuery()
和 execute()
调用已经在方法内部,因此您不需要创建新的查询对象,也不需要手动执行任何操作。
方法中没有 return,所以默认的 null
是 returned -- 因此,您的 $truncate_query
变成了 null
。当您尝试 execute(null)
时,您什么也得不到——甚至连错误消息都没有。
如果您想知道删除了多少行,您需要先运行一个SELECT
查询来计算行数。
如果您想确保没有剩余的数据行,您需要调用 SELECT
并检查零行数据。
这是关于你的 JSX 问题的my answer(用不同的措辞)。