1

我又来了,有问题。这是我的代码:

$sql = "SELECT * FROM paginas WHERE subpagina='0'"; 
$q = $con->prepare($sql);
$q->execute();
$q->setFetchMode(PDO::FETCH_ASSOC);
$row = $q->fetch();

if (count($row) != "0")
{
    echo '<ul>';
    while($row = $q->fetch())
    {
       echo '<li><a href="?page='. $row['ID'] . '">' . $row['pagina'] .'</a></li>';
    }
    echo '</ul>';   
}

问题是,数据库中的所有记录subpagina = 0都会在页面上回显。但是,如果我在数据库中使用另一个像 3 这样的字符串,并且在这段代码中,它就不起作用。

我做了一些类似的事情var_dump $rowvar_dump(erroinfo())但它只会返回FALSE

我希望你能帮助我。

编辑:这是我的数据结构:

CREATE TABLE IF NOT EXISTS `paginas` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `pagina_link` varchar(150) NOT NULL,
  `content` varchar(10000) NOT NULL,
  `pagina` varchar(100) NOT NULL,
  `reactie` varchar(1) NOT NULL,
  `subpagina` varchar(11) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=39 ;

EDIT2:这是数据

INSERT INTO `paginas` (`ID`, `pagina_link`, `content`, `pagina`, `reactie`, `subpagina`) VALUES
(32, '?pagina=Home', '<h1>Welkom!</h1><div>Dit is een demo van het cms combora! Je mag hier op uittesten. Je kan inloggen met als gebruikersnaam demo en paswoord demo. Gelieve deze pagina niet te verwijderen.</div><div><br></div> <a href="?pagina=Home&foto=2&l=j"><img width="250px" height="250px;" src="fotos/foto2.jpg"></a>', 'Home', '1', '0'),
(33, '?pagina=test1', '<br>dslmlmqdhfkqsjdf', 'test1', '1', '0'),
(34, '?pagina=test2', '<br>', 'test2', '0', '0'),
(35, '?pagina=Nice', 'fasdfdsfadsf<br>', 'Nice', '1', '0'),
(36, '?pagina=Foto viewer ', 'Deze pagina is een test van de zelfgemaakt foto viewer:<div><br></div>\r\n<a href=\\"?foto=1&amp;l=j\\"><img width=\\"250px\\" height=\\"250px;\\" src=\\"1.jpg\\"></a>\r\n<a href=\\"?foto=2&amp;l=j\\"><img width=\\"250px\\" height=\\"250px;\\" src=\\"2.jpg\\"></a>\r\n<a href=\\"?foto=3&amp;l=j\\"><img width=\\"250px\\" height=\\"250px;\\" src=\\"3.jpg\\"></a><div><br></div>', 'Foto viewer ', '1', '0'),
(38, 'sdkjfqsdfj', 'sdjmkqjfdmlkqsfdlmkqjsdflkjdlmskfjqslmdkfj', 'test56', '1', '2\r\n');

我不确定你是否提到了这一点?

4

3 回答 3

5

你提到它是一个字符串。尝试

$sql = "SELECT * FROM paginas WHERE subpagina='0'"; 

摆弄了一组有限的桌子。添加了一些数据,上面的 SELECT 就可以了。所以这不是问题。您确定您有其他字符串而不是'0'subpagina字段吗?

看到这个sqlfiddle

您可以尝试的另一件事是

您的数据中没有 subagine = 3 这样的东西。只有 0 和 2 存在

$row = $q->fetchAll(); 
print_r($row);
/* print_r shows Array only */
/* loop the array and print the values */
foreach($row as $key => $value)
{
   echo $key + " " + $value + "\r\n";
}

编辑

只是现在才看到它:您fetch()对其进行评估$row并检查计数。然后你用 anohter 开始 while 循环,fetch()这将得到结果的 NEXT 行。第一个总是因为第一个而被跳过fetch()

使用这样的东西:

$rows = $q->fetchAll(); 

echo '<ul>';
foreach($rows as $value)
{
   echo '<li><a href="?page='. $value['ID'] . '">' . $value['pagina'] .'</a></li>';
}
echo '</ul>'; 

如果您不想要空<ul>标签,则应count($rows) > 0在 echo/foreach/echo 之前检查是否

于 2012-06-30T13:55:50.607 回答
1

在您发布的数据中,我看到它subpagina实际上是一个VARCHAR字段,而不是数字字段,它的值为2\r\n. 您可以通过多种方式解决此问题:

  • SELECT ... WHERE subpagina LIKE '2%'匹配字符串2后跟其他任何内容
  • 修复数据并删除多余的\r\n
  • 最好的方法是,如果数据确实是数字,则将其INTEGER设为VARCHAR
于 2012-06-30T14:26:43.267 回答
0

我不知道您为什么要使用字符串来存储似乎是整数的内容,但是您遇到的问题是'2\r\n'!== 2

如果你想找到'2\r\n',你需要寻找那个或使用一个LIKE条件。

于 2012-06-30T14:25:51.903 回答