0 Пользователей и 1 Гость просматривают эту тему.
  • 20 Ответов
  • 3538 Просмотров
*

cvgh

  • Захожу иногда
  • 56
  • 0 / 0
Hi all. Короче, SQL-запрос у меня такой:
Цитировать
   SELECT id,field,part_of,rank,orders*100+$arr[part_of],source1 FROM... WHERE...
где $arr -- ассоциативный массив, а part_of - поле таблицы. Но при такой записи php ругется:
Цитировать
Notice: Undefined index: part_of in...
Как объяснить ему, что part_of -- это поле таблицы?
*

cvgh

  • Захожу иногда
  • 56
  • 0 / 0
Увы. Обругалась так:
Цитировать
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in ...

На обратные апострофы тоже ругается:
Цитировать
Parse error: syntax error, unexpected '`', expecting T_STRING or T_VARIABLE or T_NUM_STRING in ...
*

cvgh

  • Захожу иногда
  • 56
  • 0 / 0
Вот полный код:
Спойлер
[свернуть]
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
$part = $arr['part_of'];
...SELECT id,field,part_of,rank,orders*100+$part,source1 FROM...
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

Fedor Vlasenko

  • Живу я здесь
  • 3819
  • 716 / 7
  • Все начинается с Value
Вы вставляете поле orders*100+$arr[part_of] ?
Походу это ошибка, как в синтаксисе так и в действии
 Lex вы то-же предлагаете генерируемое поле в таблицу вставлять?
*

cvgh

  • Захожу иногда
  • 56
  • 0 / 0
Да, идея в том, чтобы взять содержимое поля part_of, подставить его как ключ к массиву $arr и прибавить полученное значение (а оно будет числом) к значению поля orders, умноженному на сто. И потом результат вставить в другую таблицу.

Lex, сожалею, но финт не пройдет, ведь ключом должно стать не само 'part_of', а значение этого поля.
« Последнее редактирование: 13.12.2012, 15:53:24 от cvgh »
*

cvgh

  • Захожу иногда
  • 56
  • 0 / 0
Яндекс мне вот такой ответ нашел:
Цитировать
Будьте любезны подсказать, как правильно  ассоциативный   массив  в запрос встраивать?
– DemiGood 4 месяца 2 дня назад
   

Так делать НЕЛЬЗЯ как в ответе, там дыра для  sql  injection!
Как минимум надо использовать  MySQL _real_escape_string,
в лучшем случае использовать плейсхолдеры или какую либо ORM
– zloyrusskiy 4 месяца 2 дня назад
Похоже, так, я пытаюсь, не покатит, и придется разбивать запрос на два?
*

Fedor Vlasenko

  • Живу я здесь
  • 3819
  • 716 / 7
  • Все начинается с Value
cvgh Пример INSERT INTO

$new_orders = $orders*100+$arr['part_of']; //$orders надо до этого получить
$q="INSERT INTO #__hello_temp
   SELECT id,field,part_of,rank, {$new_orders},source1
   FROM #__hello WHERE rank='g' ORDER BY orders";
И вот зачем это делать, что выполучите при повторном вызове запроса с другим значением $arr['part_of']
*

cvgh

  • Захожу иногда
  • 56
  • 0 / 0
cvgh Пример INSERT INTO

Ну тут же ни слова про ассоциативные массивы, ИМХО.

Вообще, для PostgreSQL, похоже, тоже какие-то навороты необходимы, чтобы из ассоциативного в таблицу передать.
Спойлер
[свернуть]
Так что, похоже, задача в таком виде решения не имеет :(
*

cvgh

  • Захожу иногда
  • 56
  • 0 / 0
У меня сложилось впечатление, что pg_convert работает только с PostgreSQL... Или с MySQL тоже?
*

b2z

  • Глобальный модератор
  • 6969
  • 755 / 0
  • Разраблю понемногу
*

cvgh

  • Захожу иногда
  • 56
  • 0 / 0
*

cvgh

  • Захожу иногда
  • 56
  • 0 / 0
Через 2 запроса тоже не  получается. Напрашивается только такой вариант: написать функцию, единственным делом которой было бы обращение к ассоциативному массиву $arr.
*

cvgh

  • Захожу иногда
  • 56
  • 0 / 0
Хм... похоже, MySQL php'шные функции не воспринимает... Фигово-с.
*

fsv

  • Живу я здесь
  • 2623
  • 382 / 2
Код
$q="INSERT INTO #__hello_temp 
   SELECT id,field,part_of,rank,(orders*100+'.$arr[.' SELECT part_of FROM #__hello WHERE rank='g' '.].') orders,source1
   FROM #__hello WHERE rank='g' ORDER BY orders";
Веб-разработка: заказ. Только сложная и объемная разработка. Дорого.
*

dstavropolskij

  • Захожу иногда
  • 106
  • 10 / 0
Напишите на PHP цикл. Ну или на http://www.sql.ru/
Так вот просто, как хотелось бы, передать массив (хоть диссоциативный, хоть ассоциативный) не выйдет.
*

cvgh

  • Захожу иногда
  • 56
  • 0 / 0
Код
$q="INSERT INTO #__hello_temp 
   SELECT id,field,part_of,rank,(orders*100+'.$arr[.' SELECT part_of FROM #__hello WHERE rank='g' '.].') orders,source1
   FROM #__hello WHERE rank='g' ORDER BY orders";
Ошибка в парсинге:
Код
Parse error: syntax error, unexpected '.', expecting T_STRING or T_VARIABLE or T_NUM_STRING in ... on line 66 
*

cvgh

  • Захожу иногда
  • 56
  • 0 / 0
В общем, пришел к такому решению: поскольку содержимое ассоциативного массива все равно берется из таблицы #__hello_temp после предыдущего шага ее заполнения, то можно брать данные прямо из этой таблицы. Получилось вот что:
Код
   INSERT INTO #__hello_temp
   SELECT m.id,m.field,m.part_of,m.rank,(m.orders*100+t.orders) AS p,source1
   FROM #__hello AS m, #__hello_temp AS t WHERE m.part_of=t.field AND m.rank='g' ORDER BY p
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как вставить в материал скрипт (карта Яндекс)

Автор demonm

Ответов: 6
Просмотров: 11385
Последний ответ 25.04.2017, 00:02:40
от CrazyPr0ger
Подкорректировать SQL запрос

Автор yuri-it

Ответов: 9
Просмотров: 1124
Последний ответ 05.02.2016, 21:19:26
от robert
SQL запрос для добавления статьи в базу Joomla

Автор Vovk@

Ответов: 38
Просмотров: 6771
Последний ответ 27.01.2016, 22:52:40
от voland
Как вставить в материал стандартную форму обратной связи Joomla 1.5?

Автор Meloc987

Ответов: 19
Просмотров: 2292
Последний ответ 20.01.2016, 14:26:25
от effrit
Как вставить скрипт в Joomla?

Автор kvpkorchinsky

Ответов: 24
Просмотров: 15375
Последний ответ 12.11.2015, 18:46:24
от Rosheh