2009年11月4日星期三

[fw-db] Re: Zend Application Session SaveHandler DB Table issue

Sorry  I replied  off the mailing list earlier.


 I created  the sequence just as suggested  and  it didn't fix  the  issue

CREATE SEQUENCE session__seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 5
  CACHE 1;



Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[42601]: Syntax error: 7 ERROR: zero-length delimited identifier at or near """" LINE 1: ..., "name", "modified", "session_data", "lifetime", "") VALUES... ^' in C:\Zend\Apache2\htdocs\
projects\genscript\library\Zend\Db\Statement\Pdo.php:234 Stack trace: #0 C:\Zend\Apache2\htdocs\projects\genscript\library\Zend\Db\Statement.php(320): Zend_Db_Statement_Pdo->_execute(Array) #1 C:\Zend\Apache2\htdocs\projects\genscript\library\Zend\Db\Adapter\Abstract.php(468): Zend_Db_Statement->execute(Array) #2 C:\Zend\Apache2\htdocs\projects\genscript\library\Zend\Db\Adapter\Pdo\Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO "se...', Array) #3 C:\Zend\Apache2\htdocs\projects\genscript\library\Zend\Db\Adapter\Abstract.php(546): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO "se...', Array) #4 C:\Zend\Apache2\htdocs\projects\genscript\library\Zend\Db\Table\Abstract.php(1056): Z in C:\Zend\Apache2\htdocs\projects\genscript\library\Zend\Db\Statement\Pdo.php on line 234


I recreated the table  according to the documentation   http://framework.zend.com/manual/en/zend.session.savehandler.dbtable.html


CREATE TABLE "session"

(
  session_id character(32) NOT NULL,
  save_path character varying(32) NOT NULL,
  "name" character varying(32) NOT NULL DEFAULT ''::character varying,
  modified integer,
  lifetime integer,
  session_data text,
  CONSTRAINT session_pk PRIMARY KEY (session_id, save_path)
)
WITH (
  OIDS=FALSE
);



however with this same table structure,   if  I remove the resource session  config  off the resources   and  configured it per the example  at  http://framework.zend.com/manual/en/zend.session.savehandler.dbtable.html   on  the boostrap.    Then  it works  fine  I see an entry in the database.



public  function _initSessions()
{
    $config = array(
    'name'              => 'session', //table name as per Zend_Db_Table
    'primary'           => array(
        'session_id',   //the sessionID given by PHP
        'save_path',    //session.save_path
        'name',         //session name
    ),
    'primaryAssignment' => array(
        //you must tell the save handler which columns you
        //are using as the primary key. ORDER IS IMPORTANT
        'sessionId', //first column of the primary key is of the sessionID
        'sessionSavePath', //second column of the primary key is the save path
        'sessionName', //third column of the primary key is the session name
    ),
    'modifiedColumn'    => 'modified',     //time the session should expire
    'dataColumn'        => 'session_data', //serialized data
    'lifetimeColumn'    => 'lifetime',     //end of life for a specific record
);

//Tell Zend_Session to use your Save Handler
Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config));

//start your session
Zend_Session::start();   

}



Server [localhost]:
Database [postgres]: bohiti
Port [5432]:
Username [postgres]:
psql (8.4.0)
WARNING: Console code page (437) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.

bohiti=# select * from session
bohiti-# ;
            session_id            | save_path |   name    |  modified  | lifetim
e | session_data
----------------------------------+-----------+-----------+------------+--------
--+--------------
 kv72hog6jiqk02653qlul20kc7       |           | PHPSESSID | 1257339780 |     144
0 |
 pu5p31gtbouls2acd1ntlbm564       |           | PHPSESSID | 1257339788 |     144
0 |
(2 rows)


bohiti=#




Why does it not work  with  Zend_Application_Resource_Db  ?   I think it has something  to do with it trying to insert the data differently ?  double quotes?  instead of quotes  ? 

On Tue, Nov 3, 2009 at 9:09 PM, Gabriel Baez <sheik316@gmail.com> wrote:
I'm having issues  trying to use  Zend Application Resource Session  with Save Handler DB Table.

I'm getting the following  error.

Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "session__seq" does not exist LINE 1: SELECT NEXTVAL('"session__seq"') ^' in C:\Zend\Apache2\htdocs\projects\genscript\library\Zend\Db\Statement\Pdo.php:234 Stack trace: #0 C:\Zend\Apache2\htdocs\projects\genscript\library\Zend\Db\Statement.php(320): Zend_Db_Statement_Pdo->_execute(Array) #1 C:\Zend\Apache2\htdocs\projects\genscript\library\Zend\Db\Adapter\Abstract.php(468): Zend_Db_Statement->execute(Array) #2 C:\Zend\Apache2\htdocs\projects\genscript\library\Zend\Db\Adapter\Pdo\Abstract.php(238): Zend_Db_Adapter_Abstract->query('SELECT NEXTVAL(...', Array) #3 C:\Zend\Apache2\htdocs\projects\genscript\library\Zend\Db\Adapter\Abstract.php(799): Zend_Db_Adapter_Pdo_Abstract->query('SELECT NEXTVAL(...', Array) #4 C:\Zend\Apache2\htdocs\projects\genscript\library\Zend\Db\Adapter\Pdo\Pgsql.php(299): Zend_Db_Adapter_Abstract->fetchOne('SELECT NEXTVAL(...') #5 C:\Zend\Apache2\ht in C:\Zend\Apache2\htdocs\projects\genscript\library\Zend\Db\Statement\Pdo.php on line 234



My configuration is the following:

obviously I removed the username and password for this post.


<resources>
            <modules>
                <!-- Placeholder to ensure an array is created -->
                <placeholder />
            </modules>
            <db>
                <adapter>Pdo_Pgsql</adapter>
                <params>
                    <host>localhost</host>
                    <username></username>
                    <password></password>
                    <dbname>test_db</dbname>
                    <port>5432</port>
                </params>
                <isDefaultTableAdapter>true</isDefaultTableAdapter>
            </db>
            <session>
                <save_path><zf:const zf:name="APPLICATION_PATH" />/../data/sessions</save_path>
                <use_only_cookies>true</use_only_cookies>
                <remember_me_seconds>864000</remember_me_seconds>
                <saveHandler>
                    <class>Zend_Session_SaveHandler_DbTable</class>
                    <options>
                        <name>session</name>
                        <primary>
                            <session_id>session_id</session_id>
                            <save_path>save_path</save_path>
                            <name>name</name>
                        </primary>
                        <primaryAssignment>
                            <sessionId>sessionId</sessionId>
                            <sessionSavePath>sessionSavePath</sessionSavePath>
                            <sessionName>sessionName</sessionName>
                        </primaryAssignment>
                        <modifiedColumn>modified</modifiedColumn>
                        <dataColumn>session_data</dataColumn>
                        <lifetimeColumn>lifetime</lifetimeColumn>
                    </options>
                </saveHandler>
            </session>


Table Structure:

I added the column "session" to see if it fixes  it but it did not help.



CREATE TABLE "session"
(
  "session" serial NOT NULL,
  session_id character(32) NOT NULL,
  save_path character varying(32) NOT NULL,
  "name" character varying(32) NOT NULL DEFAULT ''::character varying,
  modified integer,
  lifetime integer,
  session_data text,
  CONSTRAINT session_pk PRIMARY KEY (session, session_id)
)
WITH (
  OIDS=FALSE
);



-- Index: session_idx

-- DROP INDEX session_idx;

CREATE UNIQUE INDEX session_idx
  ON "session"
  USING btree
  (session);





没有评论: