![](/img/trans.png)
[英]Display a backend-view in the frontend in a custom Joomla 3.4 component
[英]Joomla 3.4 Component with Postgres db connection
我正在開發一個joomla組件,以從postgres數據庫讀取一些數據。 Joomla安裝在mysql上。 在模型中我有
protected function getListQuery()
{
$option = array(); //prevent problems
$option['driver'] = 'postgresql'; // Database driver name
$option['host'] = '192.168.1.0'; // Database host name:port number
$option['port'] = '1111';
$option['user'] = 'user'; // User for database authentication
$option['password'] = 'password'; // Password for database authentication
$option['database'] = 'PGDB'; // Database name
$option['prefix'] = ''; // Database prefix (may be empty)
$dbstock = JDatabaseDriver::getInstance( $option );
$query = $dbstock->getQuery(true);
$query->select('*')->from($dbstock->quoteName('myTable'));
return $query;
}
我從視圖中收到錯誤,因為dabase服務器似乎不喜歡表名中的引號:
您的SQL語法有誤; 檢查與您的MySQL服務器版本相對應的手冊,以在第2行的“ myTable” LIMIT 20'附近使用正確的語法SQL = SELECT * FROM“ myTable” LIMIT 20
我能做什么?
為什么這行得通呢?
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
class SLCatalogModelProducts extends JModelList
{
public function __construct($config = array())
{
parent::__construct($config);
$option = array(); //prevent problems
$option['driver'] = 'postgresql'; // Database driver name
$option['host'] = '192.168.1.1'; // Database host name:port number
$option['user'] = 'user'; // User for database authentication
$option['password'] = 'password'; // Password for database authentication
$option['database'] = 'PGSQL'; // Database name
$option['prefix'] = '';
$db = JDatabaseDriver::getInstance( $option );
parent::setDbo($db);
}
/**
* Method to build an SQL query to load the list data.
*
* @return string An SQL query
*/
protected function getListQuery()
{
$option = array(); //prevent problems
$option['driver'] = 'postgresql'; // Database driver name
$option['host'] = '192.168.1.1'; // Database host name:port number
$option['user'] = 'user'; // User for database authentication
$option['password'] = 'password'; // Password for database authentication
$option['database'] = 'PGSQL'; // Database name
$option['prefix'] = ''; // Database prefix (may be empty)
$dbstock = JDatabaseDriver::getInstance($option);
$query = $dbstock->getQuery(true);
$query->select('*')
->from('myTable');
return $query;
}
}
確實不喜歡此代碼...但是它可以工作:-(
更改
$query->select('*')->from($dbstock->quoteName('myTable'));
至
$query->select('*')->from('myTable');
這樣可以防止在表名上使用引號。
如文檔中所述,
QUOTENAME
將SQL語句標識符名稱(例如列,表或數據庫名稱)用引號引起來,以防止注入風險和保留字沖突。
由於您的表不是保留關鍵字,並且您不處理用戶輸入(因此消除了sql注入),因此可以安全地刪除它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.