Итак, я от пользователя получаю название таблицы, из которой он хочет получить данные, и я должен проверить наличие этой таблицы. Как я понял, надо использовать 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';
?>
Создал такую страничку для теста этой функции, но ничего не выводится, что я сделал не так?
SHOW TABLES LIKE - после этого должно идти строковое значение, Вы же пишете значение, ограниченное обратными кавычками.Как минимум, не нужно напрямую вставлять в запрос... ничего, вообще ничего, для этого есть подготовленные выражения:
$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';
Ну и, наконец, как правильно сказали в комментариях - в принципе нехорошо, когда пользователь может получить данные из какой хочет таблицы просто по названию. Заведите массив, например, в котором будут перечислены названия таблиц, которые можно запрашивать - и сверяйте с ним. Можете сделать функцию для этого, завести класс - как угодно. Хоть в базе хранить (да, вот так вот, в базе хранить названия таблиц базы, которые пользователь может запрашивать).
А что у вас в файле 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';
?>
Сборка персонального компьютера от Artline: умный выбор для современных пользователей