Как использовать mysqli_query () в PHP?

Я кодирую в PHP. У меня есть следующая таблица mySQL:

CREATE TABLE `students` ( `ID` int(10) NOT NULL AUTO_INCREMENT, `Name` varchar(255) DEFAULT NULL, `Start` int(10) DEFAULT NULL, `End` int(10) DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB; 

Я пытаюсь использовать функцию mysqli_query в PHP для DESCRIBE таблицы.

Вот мой код:

 $link = mysqli_connect($DB_HOST, $DB_USER, $DB_PASS, $DATABASE); $result = mysqli_query($link,"DESCRIBE students"); 

Документация говорит, что для успешных запросов SELECT, SHOW, DESCRIBE или EXPLAIN mysqli_query () вернет объект mysqli_result .

Но оттуда я не знаю, как печатать $result так, чтобы он показывал результаты запроса. Если возможно, я хочу напечатать $ result, чтобы он выглядел так:

 +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | ID | int(10) | NO | PRI | NULL | auto_increment | | Name | varchar(255) | YES | | NULL | | | Start | int(10) | YES | | NULL | | | End | int(10) | YES | | NULL | | +----------+--------------+------+-----+---------+----------------+ 

Мой другой вопрос заключается в том, как распечатать запрос SHOW CREATE TABLE students .

 $result = mysqli_query($link,"SHOW CREATE TABLE students"); 

Ну, я должен признать, что в ручном вводе mysqli_query() нет чистого примера того, как извлекать несколько строк. Может быть, потому, что рутина так рутинная, известная людям PHP на протяжении десятилетий:

 $result = mysqli_query($link,"DESCRIBE students"); while ($row = $result->fetch_assoc()) { foreach($row as $value) echo "<td>$value</td>"; } 

Если вы хотите печатать заголовки столбцов, сначала необходимо выбрать свои данные в вложенном массиве, а затем использовать ключи первой строки:

 // getting all the rows from the query // note that handy feature of OOP syntax $data = $link->query("DESC students")->fetch_all(MYSQLI_ASSOC); // getting keys from the first row $header = array_keys(reset($data)); // printing them foreach ($header as $value) echo "<td>$value</td>"; // finally printing the data foreach ($data as $row) { foreach($row as $value) echo "<td>$value</td>"; } 

Некоторые хосты могут не поддерживать fetch_all() . В таком случае заполнить массив данных $ обычным способом:

 $data = array(); $result = mysqli_query($link,"DESC students"); while ($row = $result->fetch_assoc()) { $data[] = $row; } 

Две важные заметки, которые я должен добавить.

  1. Вы должны сделать ошибки mysqli автоматически, вместо того, чтобы проверять их для каждого оператора mysqli вручную. Для этого добавьте эту строку перед mysqli_connect() :

     mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 
  2. Самое важное: в отличие от mysql_query() , mysqli_query() имеет очень ограниченное использование. Вы можете использовать эту функцию только в том случае, если в запросе не будут использоваться переменные. Если какая-либо переменная PHP будет использоваться, вы никогда не должны использовать mysqli_query() , но всегда придерживаетесь подготовленных операторов , например:

     $stmt = $mysqli->prepare("SELECT * FROM students WHERE class=?"); $stmt->bind_param('i', $class); $stmt->execute(); $data = $stmt->get_result()->fetch_all(); 

Должен признаться, это немного многословие. Итак, для повседневного использования вместо использования функций mysqli как есть, нужно принять какую-то оболочку, которая будет скрывать весь повторяющийся код внутри. Есть много оберток, но, конечно, я считаю, что мой собственный лучший ^ _ ^. Он называется Safemysql, и он позволит вам писать безопасный и сжатый код сразу:

 $data = $db->getAll("DESCRIBE ?n", $table); 

Но если вы не любите использовать сторонние библиотеки, тогда придерживайтесь PDO.