Можете ли вы вставить переменную с помощью команды обновления поля SQL? - PullRequest
0 голосов
/ 25 апреля 2018

Если бы я хотел вставить другую букву в поле group_a_1_pick sql, чтобы она была group_b_1_pick с использованием переменной.

$update = $mysqli->query("UPDATE players SET group_a_1_pick='$pick1' WHERE food='$player'");

$ groupletter = b

$update = $mysqli->query("UPDATE players SET group_$groupletter_1_pick='$pick1' WHERE food='$player'");

Возможно ли это?

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Это то, что вам нужно. Просто оберните переменную в фигурные скобки, т.е. {$variable}. Смотрите о сложном фигурном синтаксисе http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex

$groupletter = 'b';
$pick1 = 'some_value_goes_here';
$player = 'some_other_value_goes_here';
$string = "UPDATE players SET group_{$groupletter}_1_pick='$pick1' WHERE food='$player'";
$mysqli->query($string);
0 голосов
/ 25 апреля 2018

Для значений данных вам непременно следует использовать подготовленные операторы и параметры запроса.Например, ваши значения $pick1 и $player попадают в эту категорию.Чтобы узнать о готовых утверждениях, это отличное место для начала .

Однако , это не совсем то, о чем вы спрашиваете.Вы спрашиваете об использовании переменных для объектов схемы (имена столбцов, таблиц и т. Д.) Вместо значений данных.Эти не могут быть обработаны параметрами запроса.

Хорошая новость заключается в том, что вы можете использовать переменную, чтобы делать именно то, что вы пытаетесь сделать.Например:

$query = "UPDATE Table1 SET Col_{$someVar}_X = ?";

Это просто интерполирует значение в строку, как любая другая строка в PHP.Но тогда, учитывая озабоченность по поводу SQL-инъекции , реальным вопросом становится:

Откуда $someVar откуда?

Этоникогда не должен исходить из пользовательского ввода. К счастью, хотя значения данных могут быть любыми под солнцем, объекты схемы конечны и известны заранее.Таким образом, вы можете использовать простой подход белого списка.Когда логика обрабатывается, вы можете получить список всех возможных допустимых значений для $someVar.(Либо жестко запрограммировано, либо сгенерировано из схемы базы данных.)

Затем вы можете сравнить любое входное значение со значениями в этом списке.Если совпадений нет, верните ошибку.Если является соответствием, используйте соответствующее значение из списка.Таким образом, вы всегда будете использовать только известные безопасные значения, которые ничем не отличаются от буквальной строки.

В конце концов, в то время как на первый взгляд это может вызвать некоторые тревоги SQL-инъекции:

$query = "UPDATE Table1 SET Col_{$someVar}_X = ?";

Контекст этих аварийных сигналов немного отличается, если вы знаете, откуда исходит значение:

$someVar = "123";
$query = "UPDATE Table1 SET Col_{$someVar}_X = ?";

Внедрение SQL не всегда связано с использованием подготовленных операторов в качестве волшебной палочки.Речь идет о постоянном контроле кода SQL, выполняемого вашим приложением, откуда бы этот код ни исходил.Пока вы контролируете код, а пользователь - нет, все в порядке.

0 голосов
/ 25 апреля 2018

Это не работает, потому что $groupletter_1_pick является допустимым именем переменной. С переменными в строке в двойных кавычках PHP определит самое длинное из допустимых имен переменных после $. Он не остановится на $groupletter только потому, что эта переменная существует.

Вы можете заключить переменную в скобки, чтобы указать ее в строке.

... SET group_{$groupletter}_1_pick ...

Я бы действительно рекомендовал переосмыслить дизайн вашего стола. Подобные имена столбцов указывают на данные, которые, вероятно, следует нормализовать в связанную таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...