#php #pdo
#php #pdo
Вопрос:
Я попробовал провести некоторые исследования, но не нашел ничего похожего на мою проблему.
Я действительно нашел много способов проверить, существует ли таблица, но я предполагаю, что моя проблема в том, что мои таблицы содержат обычный текст и переменную типа Opened_". $DataDeConsulta ."
Я пробовал следующий код, но, возможно, что-то упустил.. Кто-нибудь может мне помочь, пожалуйста? Заранее спасибо!
if ($valid) {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("Select 1 from `Opened_". $DataDeConsulta ."`");
$stmt->execute(["Opened_". $DataDeConsulta .""]);
$count = $stmt->fetchColumn();
if ($count <= 0) {
$msg="No Data Found";
echo($msg);
}
else{
$sql = "SELECT * FROM filecleaner.`Opened_". $DataDeConsulta ."`";
$_SESSION['DataDeConsulta'] = $DataDeConsulta;
$query_result=$pdo->query($sql);
foreach ($pdo->query($sql) as $row) {
echo '<tr>';
echo '<td>'. htmlentities($row['Emails']) . '</td>';
echo ' ';
echo '</td>';
echo '</tr>';
}
Database::disconnect();
}
}
$Valid
оно установлено на другой странице (просто проверка ошибки)
Комментарии:
1. Помимо того факта, что вы не используете заполнитель, поэтому нечего привязывать, вы не можете привязать имена таблиц с помощью подготовленного оператора. Вместо этого вы должны использовать белый список / подтвердить имя таблицы и ввести его непосредственно в sql, как вы на самом деле делаете. И выбор из несуществующей таблицы вызовет исключение, поэтому вы можете либо проверить / внести в белый список перед sql, либо перехватить это исключение.
2. Где я должен использовать заполнитель здесь?
3. … вы не можете связать имена таблиц с помощью подготовленной инструкции
Ответ №1:
Ну, я нашел решение, которое работает на случай, если оно может быть кому-то полезно:
if (isset($valid)) {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'filecleaner' AND table_name = 'Opened_". $DataDeConsulta ."'");
$stmt->execute(["Opened_". $DataDeConsulta .""]);
$count = $stmt->fetchColumn();
if ($count <= 0) {
$msg="No Data Found";
echo($msg);
}
else{
$sql = "SELECT * FROM filecleaner.`Opened_". $DataDeConsulta ."`";
$_SESSION['DataDeConsulta'] = $DataDeConsulta;
$query_result=$pdo->query($sql);
foreach ($pdo->query($sql) as $row) {
echo '<tr>';
echo '<td>'. htmlentities($row['Emails']) . '</td>';
echo ' ';
echo '</td>';
echo '</tr>';
}
Database::disconnect();
}
}