Drupal 7从外部脚本自定义db_query?

时间:2012-09-11 06:40:54

标签: php drupal drupal-nodes

我正在使用外部脚本通过调用正确的Drupal标头和引导来创建节点Insert / Edit / Delete。我包括下面的调用(在Drupal根目录下的脚本中):

define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
require_once drupal_get_path('module', 'biblio') . '/includes/biblio.contributors.inc';


实际上Node Actions (node_load, node_save)SELECT db_query正常工作正常,DELETE Queries 正好

我的意思是,node_load() node_save() db_query("SELECT ..."已经在运作..
但完全不工作

db_query("DELETE FROM {biblio} WHERE nid = %d", $nid);

..即使我使用以下方式:

$deleted = db_delete('biblio')
          ->condition('nid', $nid)
          ->execute();

不再工作了。而且,即使我不能使用DIRECT PURE PHP MYSQL查询,例如:

$mysql_connection = mysql_connect(MYSERVER, USERNAME, PASSW);
mysql_select_db(MYDATABASE, $mysql_connection);
mysql_query("DELETE FROM biblio WHERE nid=`".$nid."`");

我的天啊!怎么了?
实际上我正在尝试使用外部脚本解决BIBLIO模块及其项目。

我现在该怎么办?

我的另外一个问题是,我们不能直接将这些查询用于其他表中的项目,而不是node表。就像我现在注意到的那样,node_delete也仅用于node表中的项目。我们不能将node_delete用于其他表,例如biblio表吗?

1 个答案:

答案 0 :(得分:0)

调用db_query()db_delete()不起作用,因为Drupal无法在不知道开始使用哪个数据库引擎的情况下加载包含数据库API函数或类的必要包含文件。通常从用于运行Drupal的settings.php文件中读取该信息。从外部脚本调用数据库API时,您需要提供该信息。

请注意db_query("DELETE FROM {biblio} WHERE nid = %d", $nid);是Drupal 6代码;对于Drupal 7,您应该使用db_delete()