如何在 PHP 中使用 mysqli_query()?

标签: MySQL PHP
发布时间: 2017/4/9 21:39:38
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我在写代码在 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;

我试图在 PHP 中使用mysqli_query函数来描述表。

这里是我的代码︰

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

文件说,对于成功的选择,显示、 描述或解释查询 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");

解决方法 1:

好吧我必须承认, 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 阵列通常的方式︰

$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。

官方微信
官方QQ群
31647020