PHP循环展示MySQL数据表HTML无序列表时列表为空问题
问题:SQL数据生成HTML无序列表为空,但单条数据可正常输出
我尝试用SQL表字段生成HTML无序列表,但列表为空;不过执行echo $stories[0]['title']能得到预期值“jason”,尝试加/不加echo结果一致。
数据库结构及数据
mysql> select * from story; +----+-------+-------------------------+---------+ | id | title | content | author | +----+-------+-------------------------+---------+ | 1 | jason | histoire des argonautes | guigous | | 2 | jason | histoire des argonautes | guigous |
对应的PHP+HTML代码
<?php require 'connec.php'; $pdo = new PDO(DSN,USER,PASS); $query ='select * from story'; $statement = $pdo->query($query); $stories= $statement->fetchAll(); ?> <!DOCTYPE html> <body> <?php echo $stories[0]['title']; for ($i=0; count($stories)>$i; $i++) : ?> <ul> <li> <? echo $stories[$i]['title']?></li> <li><? echo $stories[$i]['content']?></li> <li><? echo $stories[$i]['author']?></li> </ul> <?php endfor; ?> </body>
问题原因及修复方法
问题出在循环里的**短标签<?**上,多数PHP环境默认关闭了短标签支持,导致<? echo ... ?>无法被PHP解析,所以列表内容无法输出。而你最开始的echo $stories[0]['title'];用的是完整的<?php标签,所以能正常执行。
修复方案:
- 把循环里的所有短标签
<?替换为完整的<?php标签,修改后的代码如下:
<?php echo $stories[0]['title']; for ($i=0; count($stories)>$i; $i++) : ?> <ul> <li> <?php echo $stories[$i]['title']?></li> <li><?php echo $stories[$i]['content']?></li> <li><?php echo $stories[$i]['author']?></li> </ul> <?php endfor; ?>
- (不推荐)如果一定要用短标签,可以修改
php.ini配置文件,设置short_open_tag = On,但这种方式会降低代码的兼容性,不建议在生产环境使用。
内容的提问来源于stack exchange,提问作者Maël Etienne
相关产品推荐
相关产品推荐

