Всем привет!
Вот офф ссыль, чтобы не быть голословным:
http://api.drupal.org/api/drupal/includes%21database%21database.inc/func...
и там в комментах:
<?php
// Drupal 7
// Notice the place holders are now done using the same syntax as PDOs (:uid)
// Placeholders also don't need to be quoted anymore.
$uid = 1;
$result = db_query('SELECT n.nid, n.title, n.created
FROM {node} n WHERE n.uid = :uid', array(':uid' => $uid));
// Result is returned as a iterable object that returns a stdClass object on each iteration
foreach ($result as $record) {
// Perform operations on $record->title, etc. here.
// in this example the available data would be mapped to object properties:
// $record->nid, $record->title, $record->created
}
// Same example in Drupal 6
$uid = 1;
$result = db_query("SELECT n.nid, n.title, n.created
FROM {node} n WHERE n.uid = %d", $uid);
while ($record = db_fetch_object($result)) {
// Perform operations on $record->title, etc. here.
}
// NOTE: db_fetch_object and db_fetch_array have been removed from D7!
?>
Друге! Это нихрена не одно и тоже: :uid и %d
Почитал внимательно вот это:
$args: An array of values to substitute into the query. If the query uses named placeholders, this is an associative array in any order. If the query uses unnamed placeholders (?), this is an indexed array and the order must match the order of placeholders in the query string.
Вначале подумал что (?) - это какойто прикол, мол они сами не знают что это за хрень. Но:
http://api.drupal.org/api/drupal/includes%21database%21database.inc/grou...
оказалось это не именованные placeholders. Кто что думает по поводу безопасности, в связи с этими неочевидными (да нахрена же?!!) изменениями...
ЗЫ: я конечно юзаю init_var, которую написал почти сам (точнее спер, но потом почти всю переписал, в силу убогости), которая берет из $_POST и $_GET (где найдет - там и возмет), да еще и в зависимости от типа (третий параметр) начинает валидировать, если что - дефалт значение (второй параметр). Но вдруг я чтото недописал, в результате SQL иньекции, кто что понял вообще? Время уже ночь...
Комментарии
что?
раньше можно было не беспокоится за передаваемые в db_query параметры. Сейчас я не вижу аналога Именованные placeholders - это вообще бред по моему...
И что они сделали с кавычками?
Я задам проще вопрос: тестил ли ктонить новый db_query на предмет SQL инъекций?
и сейчас тоже
аналога чего?
пиши ещё
%d, %s
давно пишу
<?php
// 6.x
db_query('SELECT * FROM {node} WHERE nid=%d OR title="%s"', 10, 'blabla');
// 7.x
db_query('SELECT * FROM {node} WHERE nid=:? OR title=:?', array(10, 'blabla'));
// тут еще длинней и вообще не очевидно для чего
db_query('SELECT * FROM {node} WHERE nid=:id OR title=:title', array('id' => 10, 'title' => 'blabla'));
?>
в последнем случае наверно улучшится повторное использование и дебаг, но длинна улетает...
Более того, 1, 2 случай, можно поменять местами 10 и 'blabla', в первом случае будет ошибка db_query, во втором не верно выполнится запрос. В 3м случае явно так не получится, но вот что если вместо 10, будем передавать, например, $_POST['nid']?
и часто ты меняешь местами?
дрис дропнет твою базу данных
Кэп думает, что ТС не верит, что в новой версии "абстрогатора" происходит проверка типа данных и автоматическое экранирование.
Цитирю фразу из Database abstraction layer API 7-ки:
The values to place into those placeholders are passed separately, and the database driver handles inserting the values into the query in a secure fashion. That means you should never quote or string-escape a value to be inserted into the query.
Это вы зря, товарищ. Стало ведь куда удобней. Не нужно читать всю километровую строку вашего запроса, чтобы найти, в какой последовательности вы скармливаете ей подстановочные значения, теперь это видно сразу в аргументе.
ну в целом я согласен с вами )
тему создал чтобы пораздуть, да к тому же ночью => воспринимать ее в серьезе не стоит...
просто хотелось получать ошибки не уровня DB, а уровня PHP...
Что скажете про нечно вроде ORM, которую нагородили в 7ке? )
Ктонить юзает?
не подумайте, что я с каким либо призрением это говорю...
Просто по опыту schema 6.х, я знаю что встроенными средствами организовать целостность данных в BD нельзя. После утомительного загугливания и прочтения 1000 коментов, я перешел на чистые SQL запросы, вместо того чтобы вначале городить schema, а потом досылать ALTER в сервер, чтобы гарантировать ссылочную целостность таблиц...
В связи с этим впечатлением, у меня с трудом язык поворачивается назвать то, что я увидел в доках ORM, хотя конечно объекты, абстракция и БД - там присутствует
Тут с вами согласен. Это еще не доктрина далеко, где вообще не паришься с сущностями и связями и все наглядно хранится в одном месте. Но это отличный переход для Drupal. Согласитесь, ведь не нужно было полгода ковырять API, чтобы перепрыгнуть на 7-ю ветку, разработчики отлично продумали стадии перехода от версии к версии. И требовать сейчас от новой версии друпал традиционного MVC и ORM ИМХО наглость))
покажи, где ты увидел в доках orm?
че нервничать то? Объясни что я не понимаю и я соглашусь, если все будет логично )
Я конечно могу скинуть ссыль на вики, определяющую абривиатуру...
да ни в коем случае. Ни от кого я ниче не требую. Более того, я считаю что друпал для опредленного круга задач годен и по моему мнению нужно наоборот стремится к обратной совместимости, нежели делать из друпала чтото непонятно ) Проще тогда уж написать новый фреймворк, хотя зачем? Есть же симфония под пхп )
Я вообще об впечатлениях. Я боюсь залипать за то что они там нагородили, поэтому спросил прежде о впечатлениях. Вдруг вы меня удивите )))
ок ок, она выглядит как будто orm
где я нервничал то? я задал вполне уместный вопрос
скинь лучше ссыль на доки друпала, где говорится про orm, или где "ты подумал" что говорится про orm
кто "она"?