我有一个看起来像这个$query="SELECT * FROM #__content"
的 mysql 查询。
表名开头的#__
是什么意思?
#__
是表的前缀
#__
只是数据库表前缀,并在配置中定义.php
如果没有定义,人们将不得不手动将他们的前缀输入到每个需要访问数据库的扩展中,你可以想象这会很烦人。
例如,如果您数据库表前缀为 j25
,则:
#__content
= j25_content
正如其他人所说,哈希下划线序列"#_"是Joomla用于表名的前缀!(注意:只有一个下划线,第二个下划线是为了表名中的可读性而保留的。
当你第一次设置Joomla!时,你可以选择设置一个前缀,或者使用当时随机生成的前缀。您可以在此处阅读有关如何检查前缀的信息。
当您使用JDatabase类访问数据库时,它为您提供了一种抽象机制,以便您可以与Joomla正在使用的数据库进行交互,而无需专门为MySQL或MSSQL或PostgreSQL等编写代码。
当JDatabase在执行查询之前准备查询时,它会将查询from
段中#_
出现的任何匹配项替换为安装Joomla!时的前缀设置。
// Get the global DB object.
$db = JFactory::getDBO();
// Create a new query object.
$query = $db->getQuery(true);
// Select some fields
$query->select('*');
// Set the from From segment
$query->from('#__myComponents_Table');
稍后执行查询时,JDatabase 会将 SQL 的from
段从
from #__myComponents_Table
至
from jp25_myComponents_Table
— 如果前缀是 jp25
,则在执行之前。