2010-11-09 29 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