Создать сообщение об ошибке, если таблица не существует pdo

#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();
                }
            }