0

mySQL データベースから項目のリストを取得し、Web ページの選択オブジェクトにリストとして挿入しようとしています。以下は、動作していないコードの一部です。

最初の行では、作成した DatabaseInterface というシングルトン オブジェクトの getBrands() というパブリック関数から JSON オブジェクトを取得しようとしています。

2 行目は、その JSON オブジェクトを php 配列に変換しようとしています。

最後に、Web ページのタグ間の各項目をオプション化できるループを実行しています。

どこが間違っていますか?

<?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>';
}

一部のインスタンスでオブジェクトであることが心配な場合 (PHP 連想配列とほぼ同等の非配列 JS オブジェクトがあった可能性があります)、json_decode の結果を配列にキャストできます。

$brandArray = (array)$brandArray;

さて、あなたの方法では、これを行う本当に正当な理由がない限り、 で物事を混乱させるのではなく、getBrands()単に使用することを強くお勧めします。$row['psBrandName']extract

于 2013-06-29T17:34:26.890 に答える