Joomla 3.1:从外部PHP访问数据库

Joomla 3.1:从外部PHP访问数据库,php,mysql,joomla,pdo,Php,Mysql,Joomla,Pdo,我有一个外部PHP脚本,我正在使用PDO进行查询,如下所示: try { $dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password); $sql = "SELECT * FROM $table WHERE userName=:userName"; $stmt = $dbh->prepare($sql); $stmt->bindParam(':userName', $us

我有一个外部PHP脚本,我正在使用PDO进行查询,如下所示:

try
{
    $dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password);
    $sql = "SELECT * FROM $table WHERE userName=:userName";
    $stmt = $dbh->prepare($sql);
    $stmt->bindParam(':userName', $userName);
    $stmt->execute();
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $dbh = null;
}
catch(PDOException $e)
{
    echo $e->getMessage();
}
由于我是Joomla/PHP新手,我不确定这是否是一个好的实践。 我当前的设置是否存在安全风险? 我刚刚发现可以在外部脚本中使用JFactory,但我只是 想知道在我的情况下是否必须改用JFactory,或者我可以坚持使用PDO吗?

试试这个

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root,means path to Joomla installation
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$app = JFactory::getApplication('site');
$app->initialise();
$db = JFactory::getDBO();// Joomla database object
有关用法的详细信息

这比显式提供DB名称和主机名要好得多


希望它有意义。

$hostname
$db
$table
变量来自哪里?如果有人可以编辑他们的值,那么你就有麻烦了。嗨@Lucio,它是在try-catch语句之前定义的(硬编码)。我应该用另一种方式来定义它吗?谢谢你的链接@Dasun,实际上我的问题是,坚持使用PDO而不是使用JFactory好吗?我用谷歌搜索了一下,但没有用。只看到一篇文章建议使用PDO而不是avail框架,但没有解释背后的逻辑。感谢您的及时回复。我想知道是否可以坚持PDO或者我必须使用可用的框架。当您使用Joomla时,您必须使用框架标准,而不是显式连接。Joomla支持许多PDO操作检查这个也谢谢Jobin!感谢您的善意投入