PHP 使用mysqli_fetch_assoc获取数据库列表


PHP Using mysqli_fetch_assoc to get Database listing

我知道我读过很多关于mysqli_fetch_assoc()函数的文档和教程,但有一个问题我似乎找不到答案。顺便说一下,我对PHP完全陌生,3天前才开始学习它。我在这里想做的是。

1) 连接到服务器
2) 选择数据库
3) 列出连接的服务器上的可用数据库

# Connecting to mySQL server on localhost
# creating host and credentials to login to server
$user = "root";
$pass = "pass123";
$host = "localhost";
$DB = "artechdb";
# Create a connection
$sqlconnect = mysqli_connect($host, $user, $pass, $DB);
echo "Connecting to {$host}....";

# Check if connection successful
if (!$sqlconnect) {
    die ("Could not connect to $host");
} else {
    print "<br>Connected Successfully to $host<br><br>"; 
}

print "Lets see what kind of databases we have on our mySQL server.<br>";
$queryString = "SHOW databases";
$result = mysqli_query($sqlconnect, $queryString);
if($result = mysqli_query($sqlconnect, $queryString) ) {
    # fetch associative array
    while($row = mysqli_fetch_assoc($result) ) {
        printf ("%s", $row["Database"] . "<br>");
        }
}

我的问题是最后 printf 语句包含 $row["数据库"] 在哪里"数据库"一词来自?我没有名为"数据库"的数据库。

我认为由于它是一个关联数组,我可以使用 $row[0] 访问和/或打印出我的数据库名称。$row[1] .等不起作用。我花了几个小时试图弄清楚数据库键盘来自哪里以及为什么我们使用它而不是使用从零开始的索引访问我们的数组。任何帮助真的很感激。

当你使用mysqli_fetch_assoc()时,你会得到一个关联数组,其中包含找到的行,键将是列名。数字索引将不包括在内

如果您想知道该Database来自何处,它是结果集的列名。

当你直接查询它(例如,PHPMyadmin或终端)时,应该看起来像这样:

+--------------------+
| Database           |   <----- $row['Database']
+--------------------+
| information_schema |
| phpmyadmin         |
| test               |
+--------------------+

所以你也想访问数字索引吗?

如果还想访问数字索引$row[0],则需要使用 mysqli_fetch_array()

因此:

// you can now acces both
// $row[0] / $row['Database']

之后,对代码:

删除多余的mysqli_query()

$result = mysqli_query($sqlconnect, $queryString);
if($result = mysqli_query($sqlconnect, $queryString) ) { // no need for this

所以最后:

$result = mysqli_query($sqlconnect, $queryString);
while($row = mysqli_fetch_array($result)) { // fetch_array()
    printf ("%s", $row["Database"] . "<br>");
    echo $row[0];
    // now you can access both
    // $row[0] / or / $row['Database']
}