私はPDOを学習しています。私はちょうどYoutubeのチュートリアルに従いました。そこでここではDbクラスのメソッドがあり、foreachのほかにwhileループを試したいので、PDO :: FETCH_ASSOCという新しい行を追加しました。PHP:PDO fetch()に結果が表示されない
public function query($sql, $params = array()){
$this->_error = false;
$this->_count = 0;
if($this->_query = $this->_pdo->prepare($sql)){
#check if theres a parameter and bindvalue to sql statement
if(count($params)){
$x = 1;
foreach($params as $param){
$this->_query->bindValue($x, $param);
$x++;
}
}
#execute with or without parameter
if($this->_query->execute()){
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_whileFetch = $this->_query->fetch(PDO::FETCH_ASSOC);
$this->_count = $this->_query->rowCount();
}else{
$this->_error = true;
}
return $this;
}
} #end of GET function
public function whileFetch(){
return $this->_whileFetch;
}
のforeachがうまく機能しているが、私は、whileループを試してみたいが、それはどのようなデータが表示されない、動作しないようです。
$query = $db->query("SELECT * from master_data.store");
while($row = $query->whileFetch()){
echo $row['name'];
}
これも試してみますが、エラーが表示されます。
while($row = $query->fetch(PDO::FETCH_ASSOC)){
echo $row['name'];
}
おかげで、私がやったが、私は一度だけwhileループやforeachのそれぞれを呼び出すことができますし、次のループはもう機能していません –
@RaffyTLawrenceはい、whileループを使用して結果セットを反復処理すると、結果セットが使い果たされるからです。結果セットの先頭を指すように結果ポインターを調整することはできません。したがって、結果セットをループするには 'while'または' foreach'ループを使用します。 –
@RaffyTLawrenceこれを言って、結果セット*をもう一度繰り返したい場合は、PDOカーソルを 'CURSOR_SCROLL'に設定する必要があります。デフォルトでは 'CURSOR_FWDONLY'に設定されています。このSOのスレッドを見て、*受け入れ*答え:[http://stackoverflow.com/q/15637291/5517143](http://stackoverflow.com/q/15637291/5517143) –