使用php检索项目列表

时间:2013-06-29 16:15:08

标签: php arrays json singleton

我正在尝试从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);

}

1 个答案:

答案 0 :(得分: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结果转换为一个数组。 / p>

$brandArray = (array)$brandArray;

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