我正在尝试从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);
}
答案 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
混乱,除非您有充分的理由这样做。