2016-03-02 3 views
1

Так мне было интересно, почему готовы Постулаты не будут работатьПростого Подготовленное заявление с заполнителем не работает

$makr = 'users'; 
$stm = $con->prepare("SELECT * FROM ?"); 
$stm->bindparam(1, $makr); 
$stm->execute(); 

я получаю эту ошибку.

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'dd23834_house.'users'' doesn't exist' in /nfs/c11/h05/utt/23824/domains/.../html/home.php:77 Stack trace: #0 /nfs/c11/h05/utt/23824/domains/.../html/home.php(77): PDOStatement->execute() #1 {main} thrown in /nfs/c11/h05/utt/23824/domains/.../html/home.php on line 77 

Да У меня есть таблица с именем Users.

Я только хочу захватить все из базы данных пользователей, у меня нет предложения where, но я также хочу, чтобы это было безопасно.

+0

Вы не можете привязать таблицу/colum 'FROM?' И закрыть соответственно. –

+0

Хорошо, спасибо, я этого не знал. Я попытался найти его самостоятельно, но не смог найти сообщение, подобное тому, которое вы связали. Еще раз спасибо. – Kmiles1990123

+0

Добро пожаловать. Вы можете использовать безопасный список, в отношении комментария, который вы оставили в ответе ниже. –

ответ

1

Имена таблиц и столбцов не могут быть заменены параметрами в PDO. Что вы можете сделать:

$makr = 'users'; 
$stm = $con->prepare("SELECT * FROM $makr"); 
$stm->execute(); 
+0

с точки зрения безопасности. Есть ли риск для любого типа SQL-инъекции или XSS? Это безопасно? – Kmiles1990123

+0

Не в том случае, когда я показал вам, вход пользователя не задействован. Если, однако, '$ makr' является пользователем, чем да, огромный риск для инъекций SQL. – Daan

+0

Большое спасибо Daan, очень ценим. – Kmiles1990123

Смежные вопросы