首页 文章

Zend Framework 2使用DbTable适配器进行身份验证

提问于
浏览
2

那是我的local.php配置:

'db' => array(
    'driver' => 'pdo_mysql',
    'dns' => 'mysql:dbname=xxxx;host=localhost;',
    'username' => 'xxxx',
    'password' => 'xxxx',
    'port' => 3306,
    'charset' => 'UTF8',
    'driver_options' => array(
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
    ),
),
'service_manager' => array(
    'factories' => array(
        'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
    )
)

那是我的身份验证码:

$authAdapter = new AuthAdapter($sm->get('Zend\Db\Adapter\Adapter'));
            $authAdapter->setTableName('users')
                ->setIdentityColumn('username')
                ->setCredentialColumn('password')
                ->setCredentialTreatment("SHA2(CONCAT({$salt}, ?, salt), '512') AND active = 1");

            $authAdapter->setIdentity($formData['username'])
                ->setCredential($formData['username']);

但是当我尝试提交登录表单时,zend框架会抛出这个错误:

文件:/var/www/app/vendor/zendframework/zend-authentication/src/Adapter/DbTable/AbstractAdapter.php:331消息:提供给DbTable的参数无法生成有效的sql语句,请检查表名和列名有效性 . 文件:/var/www/html/bookingSystemRewrite/vendor/zendframework/zend-db/src/Adapter/Driver/Pdo/Statement.php:244消息:语句无法执行(3D000 - 1046 - 未选择数据库)文件: /var/www/html/bookingSystemRewrite/vendor/zendframework/zend-db/src/Adapter/Driver/Pdo/Statement.php:239消息:SQLSTATE [3D000]:无效的目录名称:1046未选择数据库

1 回答

  • 0

    当我调试Pdo驱动程序适配器时,我发现我的问题在哪里 .
    第一个问题是按顺序:

    'dns' => 'mysql:dbname=xxxx;host=localhost;'
    

    一定是这样的:

    'dsn' => 'mysql:dbname=xxxx;host=localhost;'
    

    第二个问题是按顺序:

    ->setCredentialTreatment("SHA2(CONCAT({$salt}, ?, salt), '512') AND active = 1");
    

    一定是这样的:

    ->setCredentialTreatment("SHA2(CONCAT('{$salt}', ?, salt), '512') AND active = 1");
    

相关问题