symfony2:正确设置PdoSessionHandler

时间:2012-09-02 14:29:37

标签: mysql session symfony symfony-2.1

我在这个链接上关注使用PDO的symfony 2.1 cookbook页面来保存搜索数据:http://symfony.com/doc/master/cookbook/configuration/pdo_session_storage.html 问题是,在我的开发机器上,一切正常......当我清除缓存或开发环境时 但在我的生产机器(实时服务器)上我收到错误:

 [PDOException]                                                                                   
SQLSTATE[HY000] [2002] Can't connect to local MySQL server 
through socket '/tmp/mysql.sock' (2) 

在使用php app/console cache:clear --env=prod

清除缓存时

所以虽然config.yml中的代码是相同的,但我的live服务器和我的dev机器之间似乎有所不同。

我在services:

下使用这些设置
 pdo:
   class: PDO
   arguments:
        - "mysql:dbname=%database_name%"
        - %database_user%
        - %database_password%

 session.handler.pdo:
     class:     Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
     arguments: [@pdo, %pdo.db_options%]

当我做ls -la /tmp/mysql.sock时 我得到

ls: cannot access /tmp/mysql.sock: No such file or directory

1 个答案:

答案 0 :(得分:1)

将它添加到mysql中的参数:

services:
pdo:
    class: PDO
    arguments:
        - "mysql:dbname=%database_name%;host=%database_host%"
        - %database_user%
        - %database_password%
    calls:
        - [setAttribute, [3, 2]] # \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION
session.handler.pdo:
    class:     Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
    arguments: ["@pdo", "%pdo.db_options%"]        

您的配置上没有数据库主机,PDO类中的第一个参数($ dsn)有两个参数用分号分隔dbname和dbhost,希望这会有所帮助,欢呼!