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 のバージョンが原因で発生します。

これは私のために働きます。必要なのは、db セットアップから driver_options を削除することだけです。このコードは通常、Config ファイルの 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 に答える