2

在身份验证时,我收到一条错误消息“提供给 DbTable 的参数未能生成有效的 sql 语句,请检查表名和列名的有效性。 ”我的登录控制器代码是

$form= new login();
        $request=$this->getRequest();
        if ($request->isPost())
        {

            $formValidator = new rotaryfilter();
            $post=$request->getPost();
            $form->setInputFilter($formValidator->getInputFilter());
            $form->setData($request->getPost());


      if($form->isValid())
            {
                $formValidator->exchangeArray($form->getData());

                $dbAdapter = $this->serviceLocator->get('Zend\Db\Adapter\Adapter');

                $authAdapter = new DbTable($dbAdapter,'Login','username','pwd');


                $authAdapter->setIdentity($formValidator->username)
                            ->setCredential($formValidator->pwd);
                //->setCredentialTreatment('MD5(?)');
                $authService = $this->serviceLocator->get('auth_service');
                $authService->setAdapter($authAdapter);

                $result = $authService->authenticate();

                if($result->isValid())
                {
                    echo 'valid';
                    exit();
                }
                else { echo 'invalid';exit();}

            }
        }
        return array('form'=> $form);

我的 module.php 包含

public function getServiceConfig()
{
    return array(
            'factories' => array(

                'auth_service' => function ($sm) {
                    $authService = new AuthenticationService(new SessionStorage('auth'));

                    return $authService;
                },

                    'General\Model\Login' =>  function($sm) {
                        $tableGateway = $sm->get('LoginGateway');
                        $table = new Login($tableGateway);
                        return $table;
                    },
                    'LoginGateway' => function ($sm) {
                        $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                        $resultSetPrototype = new ResultSet();
                        $resultSetPrototype->setArrayObjectPrototype(new rotaryfilter());
                        return new TableGateway('Login', $dbAdapter, null, $resultSetPrototype);
                    },

                    ),);
}
4

1 回答 1

2

这可能看起来很旧,但我能够解决这个错误。此错误是由您的 MySQL 版本引起的。

这个对我有用。您需要做的就是从您的数据库设置中删除 driver_options,此代码通常位于您的配置文件中的 global.php 或 .local.php 中。

更改自:

'db' => array(
    'driver'         => 'Pdo_Mysql',
    'dsn'            => 'mysql:dbname=dbName;host=localhost',
    'username'       => 'dbUser',
    'password'       => 'dbPass',
    'driver_options' => array(
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
    ),
),

'db' => array(
    'driver'         => 'Pdo_Mysql',
    'dsn'            => 'mysql:dbname=dbName;host=localhost',
    'username'       => 'dbUser',
    'password'       => 'dbPass',
),

谢谢你。这个解决方案解决了我的问题。

于 2013-10-27T01:14:12.710 回答