在用户函数中通过 TYPO3 连接外部数据库

External database connection via TYPO3 within a userfunction

我正在使用 TYPO3 6.2.X 并且有第二个外部数据库,我需要从该数据库的 table 更新一个值。

所以我实现了一个简单的用户函数,如下例(伪代码):

public function updateValue() {

    $updateData = array(
        'field1' => '1',
        'field2' => '2'
    );

    $GLOBALS['TYPO3_DB']->exec_UPDATEquery(
        'example',
        'value = 1234',
        $updateData
    );

}

到目前为止这不是问题,但是 table "example" 是外部数据库的 table。为此,我通过扩展管理器激活了 dbal 和 adodb。之后我创建了文件 typo3conf/AdditionalConfiguration.php 其中包含以下配置:

<?php
$TYPO3_CONF_VARS['EXTCONF']['dbal']['handlerCfg'] = array (
'_DEFAULT' => array (
    'type' => 'native',
    'config' => array(
        'username' => '',
        'password' => '',
        'host' => '',
        'database' => '',
    )
),
'extdatabase' => array (
    'type' => 'native',
        'config' => array(       
        'username' => 'username',        
        'password' => 'password',        
        'host' => 'host',        
        'database' => 'extern_database',        
    )
),
);
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['dbal']['table2handlerKeys'] = array(
    'example' => 'extdatabase',
);
?>

但这不起作用,我得到以下异常:

错误:没有键的处理程序"extdatabase" :(

所以dbal的扩展配置没有设置正确。 dbal的documentation 好像已经过时了,因为没有引用AdditonalConfiguration.php而是localconf.php。所以我不知道如何解决这个问题,希望你能帮助我。

该死的:/

$TYPO3_CONF_VARS['EXTCONF']['dbal']['handlerCfg']

必须

$GLOBALS['EXTCONF']['dbal']['handlerCfg']

然后它就可以正常工作了。