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

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

07.06.2017, 22:13. Показов 1616. Ответов 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,912
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru