如何在PHP中使用mysqli_query()函数?

8

我正在使用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");

文档说明:“对于成功的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");

1
没有在 PHP 手册中找到帮助? - user557846
我想显示表结构。您可以通过输入以下命令来实现:DESCRIBE students。https://dev59.com/fHI_5IYBdhLWcg3wK_s6 - cooldood3490
1
http://php.net/manual/en/mysqli-result.fetch-assoc.php - AbraCadaver
1
另请参阅MySQLi扩展基本示例,其中包括如何“打印结果行”的示例。 - showdev
1个回答

19

我不得不承认,mysqli_query()函数的手册条目中没有一个干净的示例来演示如何获取多行数据。也许是因为这个例程对于 PHP 开发人员来说是如此常见和熟悉已有几十年了:

$result = $link->query("DESCRIBE students");
while ($row = $result->fetch_assoc()) {
    // to print all columns automatically:
    foreach ($row as $value) {
        echo "<td>$value</td>";
        // OR to print each column separately:
        echo "<td>",$row['Field'],"</td><td>",$row['Type'],"</td>\n";
    }
}

如果您想打印列标题,您需要先将数据选择到一个嵌套数组中,然后使用第一行的键:

// 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 = [];
$result = $link->query("DESC students");
while ($row = $result->fetch_assoc())
{
    $data[] = $row;
}

我需要补充两点重要说明。

  1. 你需要配置mysqli自动抛出错误,而不是手动检查每个mysqli语句。为了实现这一点,在mysqli_connect()之前添加以下代码:

  2.  mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
  3. 最重要的注意事项: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();
    

我必须承认这有点冗长。为了减少代码量,您可以使用PDO或采用简单的帮助函数来处理所有的prepare/bind/execute工作:

$sql = "SELECT * FROM students WHERE class=?";
$data = prepared_select($mysqli, $sql, [$class])->fetch_all();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接