我尝试过搜索,但找不到与我的情况相符的好答案。
我有一个由drupal管理的数据库结构。我希望将该结构用于同一服务器上的另一个上下文,制作一个php文件,对db进行sql查询,并将结果提取到不受drupal管理的页面中(在这个特定情况下,drupal更像是用户界面内容管理器而不是用于网站设计的真实CMS。)
我已经安装了视图并设置了选项和标准,以便从我的php脚本所需的字段中提取数据。
预览显示我正在询问的字段,查询显示如下:
SELECT node.title AS node_title, node.nid AS nid, node.created AS node_created, 'node' AS field_data_field_descrizione_node_entity_type, 'node' AS field_data_field_web_node_entity_type, 'node' AS field_data_field_logo_node_entity_type
FROM
{node} node
WHERE (( (node.type IN ('collaborazioni')) ))
ORDER BY node_created DESC
我设法通过php脚本建立与完全相同的服务器和数据库的连接,但是当我发送查询时,我重新发现了这个mysql_error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '} node WHERE (( (node.status = '1') AND (node.type IN ('collaborazioni')) )) ' at line 3
我真的不知道出了什么问题,也许你可以帮我解决这个问题?提前感谢您的帮助。
答案 0 :(得分:0)
Drupal在视图预览查询中使用表别名。在将实际查询发送到数据库之前,它会被替换。别名部分是{node}
,它指向数据库中的节点表,但添加了在站点安装期间输入的表前缀。如果您没有使用数据库前缀,则只需删除查询的{node}
部分。如果您这样做,那么您应该将{node}
替换为prefix_node
。
所以没有前缀应该是:
SELECT node.title AS node_title, node.nid AS nid, node.created AS node_created, 'node' AS field_data_field_descrizione_node_entity_type, 'node' AS field_data_field_web_node_entity_type, 'node' AS field_data_field_logo_node_entity_type
FROM
node
WHERE (( (node.type IN ('collaborazioni')) ))
ORDER BY node_created DESC
使用前缀应该是(用你当前使用的前缀替换查询的“前缀”部分):
SELECT node.title AS node_title, node.nid AS nid, node.created AS node_created, 'node' AS field_data_field_descrizione_node_entity_type, 'node' AS field_data_field_web_node_entity_type, 'node' AS field_data_field_logo_node_entity_type
FROM
prefix_node node
WHERE (( (node.type IN ('collaborazioni')) ))
ORDER BY node_created DESC