PHP / MySQLi: как предотвратить внедрение SQL при использовании имени столбца переменной для выбора

Я новичок в PHP и MySQLi и надеюсь, что кто-то может помочь мне с этим.

Я пытаюсь предотвратить внедрение SQL в операторе Select.
Когда речь идет только о значениях (как в части Like здесь), я использую «bind_param«Как в примере ниже, который работает как задумано.

Тем не мение, У меня проблемы с именем столбца переменной, так как я не могу использовать «bind_param» для этого.

Может кто-нибудь сказать мне, как я могу предотвратить внедрение SQL для имени столбца переменной ($language) а также (текущий код работает)?

Мой PHP:

$language = "some language";
$location = "some location";
// ...

$stmt = $conn->prepare("SELECT tID, " . $language . " FROM Main WHERE location LIKE ? ORDER BY sortOrder, " . $language);
$stmt->bind_param("s", $location);
$stmt->execute();
// ...

Большое спасибо заранее за любую помощь,
Майк

0

Решение

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

Лучшим решением было бы нормализовать дизайн базы данных, чтобы язык был в строках, а не в столбцах. Затем вы можете без проблем использовать параметризованный запрос.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]