Как стать автором
Обновить

Комментарии 19

Отличная вешь. меня в свое время очень впечатлило)
Знаю пример не совсем для Друпала, но очень полезный
mysql_real_escape_string лучше, так как учитывает локали
а sprintf — это вообще бррррр, а что если нужно LIKE '%…?
Читать надо :) Если нужно, делаем %%
нашёл опечатку
SELECT n.nid, n.title FROM {node} n LEFT JOIN {users} n ON n.uid = u.uid WHERE n.type = '%s' AND u.login > 199976743
Спасибо, поправил.
в примере реализации хука, код «if ($primary_table == 'u') » немного не понятен, может быть «u» заменить на «node» или на «n»?
Да, конечно, так и есть. Yet another опечатка.
если я правильно понял, то в хуке «hook_db_rewrite_sql()», в аргументе "$primary_table" передается алиас таблицы, а не само название таблицы или и то, и другое?
Там передается то, что вы передаете в db_rewrite_sql() во втором параметре. Цитирую:

$primary_table Имя или псевдоним таблицы, которая имеет первичный ключ для этого запроса. Хотя обычные имена таблиц такие: {blocks}, {comments}, {forum}, {node}, {menu}, {term_data} или {vocabulary}. Но не смотря на это, обычно используются псевдонимы таблиц, например: b, c, f, n, m, t или v.
Уже разобрался, заглянув в доки. В общем, может быть и то и другое, как сам программист захочет, но для стандарных таблиц рекомендуют передавать их стандартные алиасы.
Я бы предложил не заниматься ерундой, а взять нормальный ORM типа Propel ( propel.phpdb.org/trac/ ) или Doctrene ( en.wikipedia.org/wiki/Doctrine_(PHP) ).

Все object-oriented сов семи вытекающими отсюда вкусностями. Есть куча behaviours и т.п. После того как попользовался нормальными ORM на Drupal-овскую порнографию смотреть даже не хочется.
При это переписать 80-90% кода ядра и модулей. Зачем? Погуглите ветки с холиварами об ООП в Drupal. Для большинства его защитников — это просто самоцель.
Это как предложить автогонщику взять инструкцию от истребителя и переделать его автомобиль в соответствии с его требованиями ;)
а как такой код:
    db_query(«SELECT n.nid FROM {node} n WHERE n.type = '%s'», $type);
обеспечивает безопасность от SQL-инъекций?
ведь если в $type окажется все то же значение story' UNION SELECT s.sid, s.sid FROM {sessions} s WHERE s.uid = 1/*, ф-ция db_query подставит всю строку.
или я чего-то не понимаю?
удовлетворяю ваш интерес
SELECT n.nid FROM node n WHERE n.type = «story\' UNION SELECT s.sid, s.sid FROM {sessions} s WHERE s.uid = 1/*»
спасибо, все понятно :-)
спасибо, все понятно :-)
SQL (в лучшем случае в виде prepared statement):
SELECT * FROM a WHERE field = 0

HaskellDB (проверка корректности запроса во время компиляции и прочие плюшки):
query = table a >> restrict (a! field .==. constant 0)

DSEL рулят по-черному.

PS поцчему PHP, язык для веба, не дает никаких преимуществ при работе именно в вебе?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации