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 $row私は、のようなことをvar_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を行い、カウントをチェックします. fetch()次に、結果の NEXT 行を取得する別のループを使用して while ループを開始します。最初のものは最初のもののために常にスキップされます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) > 0echo/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 に答える