0

我正在尝试从 mySQL 数据库中检索项目列表,并将它们作为列表插入到网页上的选择对象中。以下是不工作的代码位。

在第一行中,我试图在我创建的名为 DatabaseInterface 的单例对象中从名为 getBrands() 的公共函数中检索 JSON 对象。

然后第二行尝试将该 JSON 对象转换为 php 数组。

最后,我正在运行一个循环,它可以选择网页标签之间的每个项目。

我哪里错了?

<?php 

var $brandArrayJSON = DatabaseInterface::getBrands();
$brandArray = JSON_decode($brandArrayJSON);

for ($loop=0; $loop < sizeof($brandArray); $loop++) {
    echo "<option>$brandArray[$loop]</option>";
}

?>

编辑:如果有帮助,这是我的 DatabaseInterface 单例。我已将此文件包含在我的 php 文件的顶部

class databaseInterface {

private static $_instance;

// Private constructor prevents instantiation
private function __construct() {
}

public static function getInstance() {
    if (!self::$_instance) {
        self::$_instance = mysqli_connect(self::databaseHost, self::databaseUsername, self::databasePassword, self::databaseName);
        if (mysqli_connect_errno(self::$_instance)) {
            throw new Exception("Failed to connect to MySQL:" . mysqli_connect_error());
        }
    }
    return self::$_instance;
}

public function getBrands() {

    try {
        $con = DatabaseInterface::getInstance();
    } catch (Exception $e) {
        // Handle exception
        echo $e->getMessage();
    }

    $query = "SELECT psBrandName from brands";
    $result = mysqli_query($con, $query) or die ("Couldn't execute query. ".mysqli_error($con));

    $resultArray[] = array();

    while ($row = mysqli_fetch_assoc($result)) {

        extract($row);
        $resultArray[] = $psBrandName;

    }

    return json_Encode($resultArray);

}
4

1 回答 1

0

代码没有任何“错误”,因为它应该可以工作(只要查询端没有任何问题)。但是,有几件事需要改进。

getBrands()首先,该方法所做的基本上是等价的:

$brandArray = json_encode(array('test','test2','test3'));
echo $brandArray; // returns ["test","test2","test3"]

现在,当您解码时,您会得到最初放入(数组)的相同内容:

$brandArray = json_decode('["test","test2","test3"]');
var_dump($brandArray); // Will dump an array

由于这是一个数组(不是PHP 对象),您可以只使用 foreach。

foreach($brandArray as $option) {
    echo '<option>', $option, '</option>';
}

如果您担心它在某些情况下是一个对象(也许您有一个非数组 JS 对象,它几乎等同于 PHP 关联数组),您可以将 json_decode 结果转换为一个数组。

$brandArray = (array)$brandArray;

现在,在您的getBrands()方法中,我强烈建议您只使用$row['psBrandName']而不是将事情弄乱extract,除非您有充分的理由这样做。

于 2013-06-29T17:34:26.890 回答