我正在尝试使用我的数据库中的选项(流派)创建一个下拉列表。例如,如果我在我的数据库中有喜剧,惊悚和动作,这些类型将在我的下拉列表中作为选项提供。基本上会发生的是我得到一个没有选项的空白列表,我想知道我的代码是否有任何问题。提前谢谢。
<?php
$sql = 'SELECT DISTINCT Genre.name FROM (Genre JOIN Movie2Genre ON Genre.id = Movie2Genre.idGenre)';
$stmt = $db3->prepare($sql);
$stmt->execute();
$allGenre = $stmt->fetchAll();
echo "<select>";
foreach ($allGenre as $val){
echo "<option value='{$val["name"]}'>{$val["name"]}</option>";
}
echo "</select>";
?>
答案 0 :(得分:0)
鉴于您当前的代码,我们可以说明
$genre
<option>
元素$genre
未设置) 如果1为真,考虑将explode
&#39; d / $genre
的值加入封闭的<select>
{{ 3}} 标签。
如果是2,则选择将为空。由于您的问题不包括输出选择的特定代码,因此很难说出真正的问题是什么。你的问题表明&#34;我无法选择(放弃)&#34;所以甚至可能有JavaScript改变了(如果有的话)输出选择的enabled属性。
答案 1 :(得分:0)
正如comments中所述,您使用setAttribute()
设置了默认提取模式。因此,您将数据作为对象获取,而不是像正常那样将数据作为数组获取,其中包含:
$dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
也是来自manual的引用,其中说明哪种模式是默认模式:
PDO :: FETCH_BOTH(默认值):返回在结果集中返回的数组,该数组由列名和0索引列号索引
所以不是这个结构:
Array
(
[0] => Array
(
[id] => 1
[0] => 1
[number] => 3234
[1] => 3234
[text] => sdfdsf
[2] => sdfdsf
[texttext] => sdfsdf
[3] => sdfsdf
)
//...
你有这样的结构:
Array
(
[0] => stdClass Object
(
[id] => 1
[number] => 3234
[text] => sdfdsf
[texttext] => sdfsdf
)
//...
因此您需要使用->
来访问对象属性,如下所示:
$val->name
旁注:
此外,如果您已添加error reporting
(仅在登台时,从未投入生产!):
<?php
ini_set("display_errors", 1);
error_reporting(E_ALL);
?>
您会收到如下错误:
致命错误:无法使用stdClass类型的对象作为数组
我会建议您enable error mode获取PDO连接(只需在连接语句之后立即):
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
然后你也可以将你的数据库内容放在try & catch
块中以捕获PDOExceptions:
try {
//db stuff
} catch(PDOException) {
echo $e->getMessage();
}