SQL where子句不起作用

时间:2012-06-30 13:51:41

标签: php mysql sql

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

$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');

我不确定你是否提到这个?

3 个答案:

答案 0 :(得分: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 fetch()启动while循环,它将获得结果的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>标记,则应在echo / foreach / echo之前检查count($rows) > 0是否

答案 1 :(得分:1)

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

  • SELECT ... WHERE subpagina LIKE '2%'匹配字符串2,后跟其他任何内容
  • 修复数据并删除额外的\r\n
  • 最好的方法是,如果数据确实是数字的,那就是INTEGER代替VARCHAR

答案 2 :(得分:0)

我不知道你为什么使用字符串来存储看似整数的东西,但你遇到的问题是'2\r\n'!== 2

如果您想查找'2\r\n',则需要查找相应内容或使用LIKE条件。