С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471

Обращение к столбцам посредством переменной

07.06.2017, 22:13. Показов 1586. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Так заносит в столбец с именем 1 (имя столбца получили из POST запроса):

PHP
1
2
3
4
5
<?php
 
$_POST['do'] = 1;
 
query('UPDATE users SET ' . $_POST['do] . ' = 0 WHERE id = :id LIMIT 1 ', [':id' => id]);
Так не заносит в столбец с именем 1 (имя столбца получаем выборкой):

PHP
1
2
3
4
5
<?php
 
$params['do'] = 1;
 
query('UPDATE users SET ' . $params['do] . ' = 0 WHERE id = :id LIMIT 1 ', [':id' => id]);

Добавлено через 3 часа 53 минуты
Почему, если поместить во втором варианте переменную в обратные кавычки то всё работает:

PHP
1
2
3
4
5
<?php
 
$params['do'] = 1;
 
query('UPDATE users SET `' . $params['do] . '` = 0 WHERE id = :id LIMIT 1 ', [':id' => id]);
Почему в первом примере запись работает без обратных кавычек?

???????????????

IDE подсвечивает вариант с обратными кавычками, как ошибочный, но только он и работает во втором примере )))
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.06.2017, 22:13
Ответы с готовыми решениями:

Обращение к столбцам
Добрый день! Подскажите, пожалуйста, могу ли я как-то обращаться к значениям переименованного через оператор as столбца?! Например, у...

Переменное (выборочное ) обращение к столбцам
VBA Стиль ссылок установлен R1C1 при записи макроса машина выдает Columns(&quot;D:J&quot;).Select (буквенное обозначение столбцов) ...

Обращение к API посредством PHP
добрый день форумчане. Столкнулся с проблемой так как в пхп первый день. есть сторонее апи к которому нужно обращаться получать токен а...

11
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
07.06.2017, 22:31
Лучший ответ Сообщение было отмечено Вилки Выкидные как решение

Решение

Врете вы
PHP
1
2
query('UPDATE users SET ' . $_POST['do'] . ' = 0 WHERE id = :id LIMIT 1 ', [':id' => 'id']);
query('UPDATE users SET `' . $params['do'] . '` = 0 WHERE id = :id LIMIT 1 ', [':id' => 'id']);
Цитата Сообщение от Вилы Выкидные Посмотреть сообщение
Почему, если поместить во втором варианте переменную в обратные кавычки то всё работает:
Цитата Сообщение от Вилы Выкидные Посмотреть сообщение
Почему в первом примере запись работает без обратных кавычек?
Почитайте: http://phpfaq.ru/mysql/slashes
1
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
07.06.2017, 23:07  [ТС]
Цитата Сообщение от FloppyDisc Посмотреть сообщение
Врете вы
Мне в мои 40 больше нечем заняться, как сочинять на форуме.

Не заносит в базу второй пример, пока не помещаю в обратные кавычки переменную, полученную посредством выборки, если использовать без обратных кавычек переменную из POST, то заносит поэтому вопрос - чем отличается первый и третий вариант и почему не заносит второй и почему ide указывает, что вариант с обратными кавычками ошибочный, но при этом он 100% рабочий и почему он не работает без обратных кавычек, если ide отмечает его 100% зелёным?

Добавлено через 8 минут
И где Вы увидели у меня совпадения имён столбцов с ключевиками, что дали ссылку на такую древнюю статью, которую моя бабушка ещё с динозаврами читала

Добавлено через 22 минуты
РАБОТАЕТ (IDE сообщает, что ошибок нет)

PHP
1
query('UPDATE users SET ' . $_POST['do'] . ' = ' . $_POST['do'] . ' + 1, max' . $_POST['do'] . ' = max' . $_POST['do'] . ' + 1, m' . $_POST['do'] . ' = m' . $_POST['do'] . ' + 1, baks = baks - (m' . $_POST['do'] . ' * 10), master = master +1 WHERE id = :id LIMIT 1', [':id' => id]);
НЕ РАБОТАЕТ (IDE сообщает, что ошибок нет)

PHP
1
query('UPDATE users SET maxheart = maxheart + :ht, heart = maxheart, maxflash = maxflash + :fh, flash = maxflash, screenshot = screenshot + :st, tower = tower + :tr, ' . $params['idkits'] . ' = :kt WHERE id = :id LIMIT 1', [':ht' => $params['heart'], ':fh' => $params['flash'], ':st' => $params['screenshot'], ':tr' => $params['tower'], ':kt' => $params['idkit'], ':id' => id]);
РАБОТАЕТ (IDE сообщает, что есть ошибки)

PHP
1
query('UPDATE users SET maxheart = maxheart + :ht, heart = maxheart, maxflash = maxflash + :fh, flash = maxflash, screenshot = screenshot + :st, tower = tower + :tr, `' . $params['idkits'] . '` = :kt WHERE id = :id LIMIT 1', [':ht' => $params['heart'], ':fh' => $params['flash'], ':st' => $params['screenshot'], ':tr' => $params['tower'], ':kt' => $params['idkit'], ':id' => id]);
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
08.06.2017, 01:19
Цитата Сообщение от Вилы Выкидные Посмотреть сообщение
[':id' => id]
У вас реально есть константа с названием id?
1
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
08.06.2017, 09:48  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
У вас реально есть константа с названием id?
да, есть константа id

запрос 2 работает только, если переменную ' . $params['idkits'] . ' поместить в обратные кавычки, как в запросе 3

в запросе 1 переменные для обращения к столбцам работают без обратных кавычек
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
08.06.2017, 10:28
Вилы Выкидные, выполните вывод готовой строки:
PHP
1
echo 'UPDATE users SET ' . $_POST['do'] . ' = ' . $_POST['do'] . ' + 1, max' . $_POST['do'] . ' = max' . $_POST['do'] . ' + 1, m' . $_POST['do'] . ' = m' . $_POST['do'] . ' + 1, baks = baks - (m' . $_POST['do'] . ' * 10), master = master +1 WHERE id = :id LIMIT 1';
А также
PHP
1
echo 'UPDATE users SET maxheart = maxheart + :ht, heart = maxheart, maxflash = maxflash + :fh, flash = maxflash, screenshot = screenshot + :st, tower = tower + :tr, ' . $params['idkits'] . ' = :kt WHERE id = :id LIMIT 1';
Итог вывода сюда, на форум, скопируйте.
1
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
08.06.2017, 10:38  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
выполните вывод готовой строки
не очень понял, вот так?
Миниатюры
Обращение к столбцам посредством переменной  
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
08.06.2017, 10:46
Да, так. Смею Вам возразить: оба эти запроса не будут работать, в них обоих присутствуют ошибки.
В первом ошибка в самом начале: SET =+ 1. Вероятно, в $_POST отсутствует элемент "do".
Во втором ошибка в конце: , = :kt. Вероятно, в $params отсутствует элемент "idkits".
1
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
08.06.2017, 11:10  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
оба эти запроса не будут работать, в них обоих присутствуют ошибки
я не правильно Вас понял, сейчас задебажу в модуле, я в пустом файле их вывел

Добавлено через 14 минут
Цитата Сообщение от Para bellum Посмотреть сообщение
Итог вывода сюда, на форум, скопируйте.
Первый запрос с POST

UPDATE users SET heart = heart + 1, maxheart = maxheart + 1, mheart = mheart + 1, baks = baks - (mheart * 10), master = master +1 WHERE id = :id LIMIT 1

Второй запрос с переменной без обратных кавычек (запись в базу не производится)

UPDATE users SET maxheart = maxheart + :ht, heart = maxheart, maxflash = maxflash + :fh, flash = maxflash, screenshot = screenshot + :st, tower = tower + :tr, 0 = :kt WHERE id = :id LIMIT 1

Второй запрос с переменной в обратных кавычках (запись в базу производится)

UPDATE users SET maxheart = maxheart + :ht, heart = maxheart, maxflash = maxflash + :fh, flash = maxflash, screenshot = screenshot + :st, tower = tower + :tr, `0` = :kt WHERE id = :id LIMIT 1

На 0 не смотрите, просто на дебаге первый элемент массива с ключом 0
0
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
08.06.2017, 11:48  [ТС]
Разобрался:

Имя может начинаться с любого допустимого символа, в частности, с цифры (в этом состоит отличие от правил, принятых во многих других базах данных). Однако имя не может состоять только из цифр (!!!)

Благодарю всех, вопрос решён - идёт обращение к столбцу, имеющему имя ТОЛЬКО из цифр, что недопустимо (на скрине справа внизу мой косяк в БД), пошёл пилить
Миниатюры
Обращение к столбцам посредством переменной  
0
08.06.2017, 12:26

Не по теме:

Вилы Выкидные, хотите создать робокопа? :)

0
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
08.06.2017, 12:31  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
хотите создать робокопа?
ага ну я с раздеванием манекена под разные комплекты пилю, может что выйдет, а про цифровые имена так забыл тупо
Миниатюры
Обращение к столбцам посредством переменной   Обращение к столбцам посредством переменной  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.06.2017, 12:31
Помогаю со студенческими работами здесь

Обращение к элементам массива посредством указателей
#define _CRT_SECURE_NO_WARNINGS #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;locale.h&gt; #include &lt;process.h&gt; #include...

Возможно ли обращение к переменной с использованием значения строковой переменной?
Есть структура из 20ти различных элементов. Необходимо сформировать строковую переменную, которая бы содержала названия переменных и их...

Создание элементов формы посредством цикла, обращение к созданным элементам
Здравствуйте, прошу прощения что отвлекаю. У меня возникла одна проблема , помогите пожалуйста. Имеется кусок программы который создает...

Обращение клиента на сайт посредством пост-запроса: на какую из сторон ложится обязанность редиректа
Доброго всем времени суток! Для начала: я же правильно понимаю, что пост запрос не подразумевает редирект? это просто возможность...

Обращение к столбцам DataGridView и ошибка "Индекс за пределами диапазона"
Случилась одна незадача. При заполнении DataGridView присоединяю таблицу полученную из БД MySQL. При попытке произвести действия со...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru