PHP: public function drop ($nameTable) { $db = Db::getConnection(); $result = $db->prepare('TRUNCATE TABLE :tablename'); $result->bindParam(':tablename', $nameTable); $result->execute(); } Уже вопрос подымался раньше, и какую то часть я сделал через quote(); Но захотел очищать таблица, и передовать туда значение вот так, но оно не хочет так работать как я написал, подозреваю, синтаксис написания не верен. Хотелось бы понять как данном случае сделать такой запрос правильно. Ведь можно сделать и так PHP: public function drop ($nameTable) { $db = Db::getConnection(); $nameTable = $db->quote($nameTable); $result = $db->query('TRUNCATE TABLE '.$nameTable); }
Нет таким путём тоже нельзя, ошибка при сравнении имени таблицы... Можно просто вот так. PHP: public function drop ($nameTable) { $db = Db::getConnection(); $result = $db->query('TRUNCATE TABLE '.$nameTable); }
Имя таблицы так не подставляется, и берётся в гревисы (`). Потом, ты же не будешь подставлять в имя таблицы значение, введённое пользователем? Поэтому оно не нуждается в дополнительном экранировании - ты сам себе sql-инъекции делать не будешь --- Добавлено --- А если вдруг и понадобится на кой-то чёрт, делается так: PHP: if (in_array($_GET["table_name"], $my_tables)) // Хотя чаще такое с orderby if (!in_array($orderby = $_GET["orderby"], ["asc", "desc"])) { $orderby = "asc"; }