2010-11-09 4 views
0

У меня есть таблица с одним полем типа enum. Я выполняю следующий запрос, используя pg_querypostgres enum inserting using 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 - ненужные накладные расходы, по моему мнению, вам лучше иметь столбец int male с 1, 0 значениями и, возможно, null для неизвестных/не указанных. Со значениями, превышающими 1, он все еще надежен на будущее на случай появления нового пола. :)
  3. Если вы действительно привязаны к перечислениям, вам может потребоваться использовать PDO, потому что он делает привязывающие значения намного проще и безопаснее.
+0

нет проблем с случаями ... я знаю об этой проблеме. Думаю, я поеду с вашей второй точкой .. сделайте колонку int. – robert

+0

Извините за то, что я не был абсолютно конструктивным, я поделился всем, что знал. – pestaa

+0

PDO? Используйте pg_query_params(), это намного проще, чем PDO. PDO выглядит как PITA по сравнению с pg_query_params(). http://nl.php.net/pg_query_params –

Смежные вопросы