首页 > 解决方案 > 如何在 PHP foreach 循环中从我的 SQL 数据库中获取结果

问题描述

我正在尝试使用包含相应用户名的 XML 文件列出与数据库中的用户名关联的 ID。

我认为这可能与 $conn 不是全局变量有关,对吗?

我正在使用以下代码:

<?php //idlister.php

require 'connectDB.php';

$xml=simplexml_load_file("names.xml") or die("Error: 
Cannot create object");
foreach($xml->book as $book)
{
    $username = (string)$book->username;
    $sql = "SELECT `id` 
    FROM  `directory` 
    WHERE  `UserName` =  '$username'
    LIMIT 0 , 30";

    if ($result = $conn->query($sql)) {

        /* fetch associative array */
        while ($row = $result->fetch_assoc()) {
            echo $row["id"]."<br />";
        }

        /* free result set */
        $result->free();
    }
}
    $conn->close();
?>

当我运行上述代码时,浏览器会一直运行,直到出现 502 网关错误。

我测试了上面相同的代码,将 '$username' 替换为 'Bill'(数据库中的一个名称),并得到相同的 502 Gateway 错误。

但是当我从 for each 循环中取出 $result = $conn->query($sql) 行时,我得到了我正在寻找的结果:

<?php //idlister.php

require 'connectDB.php';

$xml=simplexml_load_file("names.xml") or die("Error: 
Cannot create object");

    $username = (string)$book->username;
    $sql = "SELECT `id` 
    FROM  `directory` 
    WHERE  `UserName` =  'Bill'
    LIMIT 0 , 30";

    if ($result = $conn->query($sql)) {

        /* fetch associative array */
        while ($row = $result->fetch_assoc()) {
            echo $row["id"]."<br />";
        }

        /* free result set */
        $result->free();
    }

    $conn->close();
?>

// 打印“20”,这是比尔的 id

如何从 foreach 循环中获取结果,或者如何从 XML 文件中获取名称以在 foreach 循环之外搜索数据库?

XML 示例:

<response>
    <book>
        <username>Sarah</username>
        <gender>f</gender>
        <age>23</age>
    </book>
    <book>
        <username>Jonathan</username>
        <gender>m</gender>
        <age>33</age>
    </book>
    <book>
        <username>Demonte</username>
        <gender>m</gender>
        <age>18</age>
    </book>
</response>

连接文件:

<?php //connectDB.php

$servername = "localhost";
$username = "username";
$password = "password";
$database = "Directory";

// Create connection to Directory
$conn = new mysqli($servername, $username, $password, $database);

// Check connection
if ($conn->connect_error) {
    die("Connection to the Directory failed: " . $conn->connect_error);
} 
echo "<h2>Directory Connection Successful</h2>";

?>

标签: phpmysqliforeach-loop-container

解决方案


推荐阅读