Забиндить невозможно, а аналогов mysql_real_escape_string()
у PDO нет. Будет ли правильно использовать PDO::quote()
?
"SELECT * FROM" . $pdo->quote( $table ) .";
Или как тогда поступать в этом случае?
Начнем с заблуждений.
Итак, как правильно добавить имя таблицы или поля в запрос?
Только через белый список.
Т.е. после фильтрации через заранее прописанный в коде список
Вариантов реализации может быть много, один из них предложен автором в комментариях - считать из БД все названия таблиц и запомнить их. Это, в принципе, может сработать. Некоторые фреймворки даже кэшируют эту информацию (например Yii). В случае с продвинутыми ORM названия поле-таблиц берутся из свойств соответствующего класса, опять же, прописанные вручную.
Но если мы колупаемся по-старинке, выполняя запросы напрямую через PDO, то проще всего будет прописать доступные варианты прямо перед использованием, тем более что таких случаев не должно быть много - иначе у нас явные проблемы с проектированием.
Плюс надо не забыть оформить имя поля или таблицы в соответствии с синтаксисом базы данных. Например, для mysql это будет заключение значения в backtick-и.
В итоге получаем примерно такой код:
if (!in_array($table, ["user","product","catalog"]));
{
throw new \Exception("Invalid table name!");
}
$sql = "SELECT * FROM `$table` WHERE foo = ?" // далее как обычно
Куда более частой является ситуация, когда нам надо выполнить запрос UPDATE динамически, если имена полей приходят, допустим, из $_POST. Принцип остается тем же:
/ список допустимых значений
$allowed = ["name","surname","email"];
// инициализация массива для значений
$params = [];
// инициализация строки с парами `fieldname` = :placeholder
$setStr = "";
// цикл по разрешенным полям
foreach ($allowed as $key)
{
if (isset($_POST[$key]) && $key != "id")
{
$setStr .= " `$key` = ?,";
$params[] = $_POST[$key];
}
}
$setStr = rtrim($setStr, ",");
$params[] = $_POST['id'];
$pdo->prepare("UPDATE users SET $setStr WHERE id = ?")->execute($params);
SELECT * FROM '".$tablevariable."' where ...
Вот по полному
mysqli_query($dblink, " SELECT * FROM '".$tablevariable."' ");
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть главная папка с проектом в которой находится папка конфига, в конфиге есть php файл, в котором я ищу абсолютный путь к этой папке так:
в парсере есть функция file_get_html, если в нее передать адрес
Нужно получить выборку данных из гугл таблицы по дате, все даты расположены в порядке убывания в одной колонке
Мне достались исходники небольшого проекта из нескольких файловПри открытии его в visual studio еще до начала компиляции в редакторе кода в каждом...