Я использовал функцию mysqli_stmt_bind_param несколько раз. Однако, если я разделяю переменные, которые я пытаюсь защитить от внедрения SQL, я сталкиваюсь с ошибками.Могу ли я параметризовать имя таблицы в подготовленном заявлении?
Вот некоторые примеры кода:
function insertRow($db, $mysqli, $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol)
{
$statement = $mysqli->prepare("INSERT INTO " .$new_table . " VALUES (?,?,?,?,?,?,?);");
mysqli_stmt_bind_param($statment, 'sssisss', $Partner, $Merchant, $ips, $score, $category, $overall, $protocol);
$statement->execute();
}
Можно ли каким-то образом заменить .$new_table.
конкатенации с другим утверждением знак вопроса, сделать еще одно заявление параметров связывания, или добавить на существующий для защиты от инъекции SQL?
Как это или какая-то форма этого:
function insertRow($db, $mysqli, $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol)
{
$statement = $mysqli->prepare("INSERT INTO (?) VALUES (?,?,?,?,?,?,?);");
mysqli_stmt_bind_param($statment, 'ssssisss', $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol);
$statement->execute();
}
Нет, параметризованный запрос не просто отбрасывает значения параметров в строку запроса, но и предоставляет РСУБД параметризованный запрос и параметры отдельно. Но такой запрос не может иметь имя таблицы или имя поля в качестве параметра. Единственный способ сделать это - динамически закодировать имя таблицы в строке запроса, как и вы уже сделали. Если эта строка потенциально открыта для атаки, вы должны сначала ее проверить; например, против списка белых списков допустимых таблиц. – MatBailie
Использование расширения mysqli безопасно, вперед! Но не забывайте санировать и проверять все свои строки .. если имя таблицы или поля или что-то, что стоит против вашей базы данных! – B4NZ41
любая специальная функция, которую вы любите использовать для дезинфекции? – GK1667