2012-06-30 5 views
1

나는 다시 여기에 문제가 있습니다. 이건 내 코드입니다 :SQL where 절이 작동하지 않습니다.

$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 $row, var_dump(erroinfo()) 같은 몇 가지 일을했지만 그것은 단지 FALSE를 반환합니다.

도와 주시면 감사하겠습니다.

편집 : 여기에 데이터

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

난 당신이 언급 있는지 확실하지 않습니다이다 :

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 : 여기 내 데이터 구조입니다?

+0

print_r ($ row) 무엇을 표시합니까? – Samson

+0

나는 그 문제가 무엇인지 잘 모르겠다. ... – rid

+0

만약 내가 print_r ($ row)을 0으로 사용한다면 그것은 데이터베이스에 내 데이터를 출력한다. 나는 그것을 heigher valuen으로 처리하면 아무것도 넣지 않는다. 브라우저. – LEDfan

답변

5

당신은 그것이 문자열이라고 언급했습니다. 시도해보십시오

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

제한된 테이블 세트를 시험해보십시오. 일부 데이터를 추가했으며 위의 SELECT가 단순히 작동합니다. 그래서 그게 문제가 아니에요. subpagina 필드에 '0' 이외의 다른 문자열이 있습니까?

당신이 시도 할 수 있습니다이 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"; 
} 

편집

은 지금 그것을 참조 존재 : 당신이 $row에 다시 assing fetch()을하고 수를 확인합니다. 그런 다음 결과의 NEXT 행을 얻을 while 루프와 함께 fetch()을 시작합니다. 첫 번째 때문에이 같은 첫 fetch()

사용 뭔가 항상 생략됩니다 : 당신이 빈 <ul> 태그를 원하지 않을 경우

$rows = $q->fetchAll(); 

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

당신이 확인해야 count($rows) > 0 당신이 에코 전에/foreach는/에코

+0

이 여러 번 시도했습니다. 감사! – LEDfan

+1

테이블 스키마를 게시하여 사용하는 데이터 유형을 추측 할 필요가 없습니다. –

+1

데이터 행 몇 개를 게시하십시오! 당신이 볼 것을 기대하고있는 것들 ... – Charleh

0
경우

왜 정수로 보이는 문자열을 저장하기 위해 문자열을 사용하는지 모르겠지만, 가지고있는 문제는 '2\r\n'! == 2입니다.

당신은 당신이 정확하게 찾아 또는 LIKE 조건을 사용할 필요가 '2\r\n' 찾으려면

.

1

게시 한 데이터에서 subpagina은 실제로 숫자 필드가 아닌 VARCHAR 필드이고, 값은 2\r\n입니다.여러 가지 방법으로이 문제를 해결할 수 있습니다

  • SELECT ... WHERE subpagina LIKE '2%'
  • 데이터를 수정하고 데이터가 실제로 숫자 인 경우, 여분의 \r\n
  • 가장 좋은 방법은 제거 아무것도 다음에 문자열 2에 맞게 만들 그 대신 VARCHAR 대신 INTEGER
+0

고마워, 문제가 해결되면서, 나는 인 텐셔너와 함께 일찍 처리한다. – LEDfan

관련 문제