Использование enum в drupal - PullRequest
       10

Использование enum в drupal

1 голос
/ 27 ноября 2009

У меня есть идентификатор таблицы mysql, имя, пол, возраст, религия (enum ('HIN', 'CHR', 'MUS'), категория (enum ('IND', 'AMR', 'SPA'), где последний 2 enum datatype и мой код в drupal был

  $sql="SELECT * FROM {emp} WHERE age=".$age." and religion=".$rel." and category=".$categ;

  $result=db_query_range($sql,0,10);

   while($data=db_fetch_object($result))
    {
      print $data->id." ".$data->name."<br>";
    }

Я не получил ни результата, ни ошибки. Я пытаюсь разные запросы с каждым полем, и все в порядке, за исключением использования enum.

 for ex: $sql='SELECT * FROM {emp} WHERE religion="'.$rel.'"';

Есть ли проблемы с использованием типа данных enum в drupal

Ответы [ 2 ]

5 голосов
/ 27 ноября 2009

Enum - это не то, что drupal может сделать с API схемы, что вы в большинстве случаев хотите использовать для модулей и прочего. Также вам не хватает конца) в вашей ссылке на это, но я уверен, что вы сделали это правильно, когда вы сделали таблицу.

Enum - это только ограничение, которое встроено в базу данных при вставке значений. Поэтому, если вы попытаетесь вставить недопустимое значение, вместо этого вы вставите пустую строку. Так что это не окажет никакого влияния на запросы Drupal для получения данных. Это также не будет иметь никакого эффекта при вставке значений Drupal, кроме преобразования недопустимых значений в пустые строки. Возможно, вы захотите проверить ваши данные, чтобы увидеть, если это так, как ожидалось. Вы можете просто не получить результатов, потому что ваш запрос ничего не соответствует.

Другой способ, которым вы строите свои запросы, это большой НЕТ НЕТ , так как это очень небезопасно. Что вы должны сделать, это:

db_query("SELECT ... '%s' ...", $var);

Drupal заменит% s вашим var и убедится, что нет SQL-инъекций и других неприятных вещей. % s указывает, что переменная является строкой, используйте% d для целых чисел, и есть несколько других, которые я не могу вспомнить сейчас. У вас может быть несколько таких заполнителей, и они будут вставлены по порядку, как функция t.

3 голосов
/ 27 ноября 2009

В заключение Googletorps советует использовать параметризованные запросы (+1). Это не только будет более безопасным, но и облегчит обнаружение ошибок;)

В исходном запросе отсутствуют некоторые кавычки вокруг значений сравнения (String). Должно работать следующее (обратите внимание на добавленные одинарные кавычки):

$sql = "SELECT * FROM {emp} WHERE age='" . $age . "' and religion='" . $rel . "' and category='" . $categ . "'";

правильный способ сделать это будет примерно так:

$sql = "SELECT * FROM {emp} WHERE age='%s' and religion='%s' and category='%s'";
$args = array($age, $rel, $categ);
$result = db_query_range($sql, $args ,0 , 10);
// ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...