从节点表中删除行

时间:2010-08-14 08:12:09

标签: drupal drupal-6

某些节点显示在内容列表中,即使它们不再存在。

当我点击它们时,我得到一个空页。

我想知道我是否可以删除“节点”表中的行,或者我应该清理其他内容。

感谢

3 个答案:

答案 0 :(得分:3)

首先:在管理页面上,转到性能,然后单击清除所有缓存按钮。如果它无法解决您的问题,请尝试禁用每个contrib,并查看问题是否仍然存在。如果没有,请尝试逐个启用它们,您将知道哪个贡献者出现了问题。将其报告给模块的问题队列。

如果禁用模块无法解决您的问题,请下载drush。尝试使用node_delete直接删除节点。示例(如果错误的节点的nid是3):

drush php-eval 'node_delete(3);'

如果您不熟悉命令行,可以使用这个小PHP文件(将它放入Drupal的根目录):

include './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
node_delete(3);

如果它不起作用,则从数据库进行备份,从节点表中删除该节点并浏览每个与节点相关的表(具有nid列),并删除相关条目。

答案 1 :(得分:2)

这可能不是你的问题,但是:

您不希望直接从数据库中删除行。你最终无法知道你的数据库之后的形状。节点ID存在于许多表中,节点通过多个表分发。

浏览nodeapi并使用Drupal框架,因为这就是它的意思!节点api将正确处理您的数据库模式。

请参阅: http://api.drupal.org/api/function/node_delete/6

因此,如果您知道节点ID,则可以调用node_delete。

答案 2 :(得分:0)

请注意(取决于您的Drupal权限)您可能需要以具有删除节点权限的用户身份运行 - 例如user-1而不是默认的匿名用户。您可以通过预先附加node_delete()来电,

来完成此操作
global $user; 
$user = user_load(1);

如果删除许多节点并通过浏览器调用PHP文件,您可能还会遇到超时。一个解决方法是通过命令行调用PHP文件(如果你有shell访问权限)。例如,

php -f custom-script.php

同样,如果要删除许多节点,也可能会耗尽内存。增加脚本调用的PHP内存限制,如下所示,

php -f custom-script.php -d memory_limit=512M

这适用于我使用Drupal 6的测试。请注意,您也可以通过在custom-script.php中设置显式超时来修复服务器超时问题。