Я новичок в 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();
// ...
Большое спасибо заранее за любую помощь,
Майк
Вы все равно можете выбрать все столбцы, а затем попытаться получить доступ к имени столбца, используя выбранный язык в наборе результатов. Если язык неверен, вы получите исключение, которое вы можете обработать.
Лучшим решением было бы нормализовать дизайн базы данных, чтобы язык был в строках, а не в столбцах. Затем вы можете без проблем использовать параметризованный запрос.
Других решений пока нет …