PDO – передача имени поля в качестве переменной

Я просто переношу свой код из команд стиля mysql_query в стиль PDO, и у меня возникла проблема. Старый код выглядел так:

$query_list_menu = "SELECT ".$_GET['section_name']." from myl_menu_hide_show WHERE id='".$_GET['id']."'"; 

И обновленный код выглядит ниже. По-видимому, это не работает. Я храню в $_GET['section_name'] строку, которая представляет имя поля из базы данных. Но я думаю, что есть проблема, когда я передаю ее как переменную. Является ли приведенный ниже код действительным? Благодарю.

 $query_list_menu = "SELECT :section_name from myl_menu_hide_show WHERE id=:id"; $result_list_menu = $db->prepare($query_list_menu); $result_list_menu->bindValue(':section_name', $_GET['section_name'] , PDO::PARAM_STR); $result_list_menu->bindValue(':id', $_GET['id'] , PDO::PARAM_INT); $result_list_menu->execute(); 

    Если $_GET['section_name'] содержит имя столбца, ваш запрос должен быть:

     $query_list_menu = "SELECT " . $_GET['section_name'] . " from myl_menu_hide_show WHERE id=:id"; 

    Предоставление:

     $query_list_menu = "SELECT :section_name from myl_menu_hide_show WHERE id=:id"; $result_list_menu = $db->prepare($query_list_menu); $result_list_menu->bindValue(':id', $_GET['id'] , PDO::PARAM_INT); $result_list_menu->execute(); 

    Причина в том, что вы хотите, чтобы фактическое имя столбца находилось в запросе – вы изменили его как параметр, который на самом деле не имеет особого смысла.

    Я также добавлю, что использование $_GET['section_name'] прямо так же представляет собой серьезный риск безопасности, так как позволяет SQL-инъекцию. Я предлагаю вам проверить значение $_GET['section_name'] , проверив его против списка столбцов перед созданием и выполнением запроса.