Проверка наличия таблицы в БД

552
12 октября 2017, 12:54

Итак, я от пользователя получаю название таблицы, из которой он хочет получить данные, и я должен проверить наличие этой таблицы. Как я понял, надо использовать SHOW TABLES LIKE 'table_name', но какой его синтаксис в php?

<?php
$mysqli = new mysqli('localhost', 'admin', '', 'root');
$mysqli->query('SET NAMES "utf8"');
$tables = $mysqli->query('SHOW TABLES LIKE `pages`');
$mysqli->close();
echo $tables;
require_once 'header.php';
require_once 'body.php';
?>

Создал такую страничку для теста этой функции, но ничего не выводится, что я сделал не так?

Answer 1
  1. SHOW TABLES LIKE - после этого должно идти строковое значение, Вы же пишете значение, ограниченное обратными кавычками.
  2. Как минимум, не нужно напрямую вставлять в запрос... ничего, вообще ничего, для этого есть подготовленные выражения:

    $mysqli = new mysqli('localhost', 'admin', '', 'root');
    $mysqli->query('SET NAMES "utf8"');
    $sql = "SHOW TABLES LIKE ?";
    $stmt = $mysqli->prepare($sql);
    $stmt->bindParam('s',$table_name);
    $stmt->execute();
    $tables = $stmt->execute();
    echo $tables[0][0];
    require_once 'header.php';
    require_once 'body.php';
    
  3. Ну и, наконец, как правильно сказали в комментариях - в принципе нехорошо, когда пользователь может получить данные из какой хочет таблицы просто по названию. Заведите массив, например, в котором будут перечислены названия таблиц, которые можно запрашивать - и сверяйте с ним. Можете сделать функцию для этого, завести класс - как угодно. Хоть в базе хранить (да, вот так вот, в базе хранить названия таблиц базы, которые пользователь может запрашивать).

Answer 2

А что у вас в файле header.php? Скорее всего начало вашего html документа? Если так - то результат вашего запроса банально не попадает в ваш html документ. Попробуйте сделать так:

<?php
require_once 'header.php';
$mysqli = new mysqli('localhost', 'admin', '', 'root');
$mysqli->query('SET NAMES "utf8"');
$tables = $mysqli->query('SHOW TABLES LIKE `pages`');
$mysqli->close();
echo $tables;
require_once 'body.php';
?>
READ ALSO
MVC или Фреймворк?

MVC или Фреймворк?

Есть шаблон MVC на с которым я разобрался и могу делать простенькие задачки используя MVCНо проблема в роутере, он так прописан, что не запускается...

229
Ошибка: Parse error: syntax error, unexpected &#39;)&#39; in /home/user167/devildrop.ru/html/epicdrop/connector.php on line 7 [требует правки]

Ошибка: Parse error: syntax error, unexpected ')' in /home/user167/devildrop.ru/html/epicdrop/connector.php on line 7 [требует правки]

Выдает ошибку: Parse error: syntax error, unexpected ')' in /home/user167/devildropru/html/epicdrop/connector

232
Насколько критичны эти ошибки?

Насколько критичны эти ошибки?

При установке миграций через composer появились эти ошибки:

220
Как реализовать такую вещь [требует правки]

Как реализовать такую вещь [требует правки]

Допустим есть кнопка на странице, как сделать так чтобы при нажатие она подключалось к базе данныхт

288