2010-11-09 26 views
0

我有一個表的枚舉類型的一個字段。我執行以下查詢使用pg_querypostgres枚舉插入使用pg_query

INSERT INTO users (email, facebook_id, first_name, middle_name, last_name, birth_date, password, gender, school_id, timezone, email_verified, role_id) VALUES ('[email protected]', NULL, 'Robert', '', 'George', '1984-05-20', 'Some password', 'MALE', 1, '0.0', false, 1); 


pg_query($connection, 'INSERT INTO users (email, facebook_id, first_name, middle_name, last_name, birth_date, password, gender, school_id, timezone, email_verified, role_id) VALUES (\'[email protected]\', NULL, \'Robert\', \'\', \'George\', \'1984-05-20\', \'Some password\', \'MALE\', 1, \'0.0\', false, 1)') 

但我得到如下錯誤。

PHP Warning: pg_query(): Query failed: ERROR: invalid input value for enum sex: "MALE" LINE 1: ...rt', '', 'George', '1984-05-20', 'Some password', 'MALE', 1,...

在postgres客戶端直接執行查詢不會給這個錯誤。這是什麼解決方案?

回答

0
  1. 請確保個案匹配。 Postgres對它不太嚴格(考慮表名),但它可能值得一檢查。
  2. 有性別屬性enum'd是我認爲不必要的開銷,你最好有一個male INT列與1,0值和可能爲空未知/未指定。如果值大於1,那麼即使出現新的性別,它仍然是未來發展的。 :)
  3. 如果您確實附加了枚舉,則可能需要考慮使用PDO,因爲它使綁定值更容易且更安全。
+0

有案例沒有問題...我意識到這個問題。我想我會跟你的第二點..做一個int列.. – robert 2010-11-09 08:59:21

+0

對不起,絕對是建設性的,我分享了我所知道的一切。 – pestaa 2010-11-09 09:04:28

+0

PDO?使用pg_query_params(),這比PDO更容易。與pg_query_params()相比,PDO看起來像PITA。 http://nl.php.net/pg_query_params – 2010-11-09 09:15:25