whileの中にwhileを入れると初めのwhileが回らなくなる原因と解決方法
- OracleでPHPを学んでいる際に、whileの中にwhileを入れると初めのwhileが回らなくなる現象に困っています。FetchArray()が上書きされている可能性があると考えていますが、どのように対応すれば良いのでしょうか?
- 具体的なコードを示します。select文を発行し、結果を$row1に格納した後、さらに別のselect文を発行して結果を$row2に格納しようとしています。しかし、2つ目のwhileループに入る前に初めのwhileループが中断されてしまいます。
- 問題の原因として、FetchArray()メソッドが上書きされてしまっている可能性が考えられます。解決方法としては、FetchArray()を上書きせずに異なる方法を使用することが必要です。具体的な方法は、FetchAssoc()メソッドを使用することです。FetchAssoc()は連想配列を返すため、異なる結果セットを処理する際に便利です。
- ベストアンサー
whileが上手く回らず困っています
dbはoracleでphpを学んでいるのですが whileの中にwhileを入れると初めのwhileが回らなくなってしまい困っています。 具体的な内容を下に明記します。 よろしければ具体的な解決方法や構文など教えていただけないでしょうか? //select文の発行 $sql1 $db->Quary($sql1); while($db->FetchArray()){ $row1 = $db->mArray[row1]; $sql2 $db->Quary($sql2); while($db->FetchArray()){ $row2 = $db->mArray[row2]; $sql3 $db->Quary($sql3); while($db->FetchArray()){ $name = $db->mArray[name]; } } } 素人考えですがFetchArray()が上書きされて 1回目と二回目のwhileが回ってないように感じるのですが FetchArray()を何に置き換えてどう対応すれば上手く回るのかがわかりません。 よろしくお願いします。
- mi0802
- お礼率100% (1/1)
- その他(インターネット・Webサービス)
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
各SQLの実行で、同じ$dbを使用しているせいだと思います。 $dbを、sqlに合わせて、$db1、$db2、$db3にしてみてはいかがでしょうか? $sql1 $db1->Quary($sql1); while($db1->FetchArray()){ $row1 = $db1->mArray[row1]; $sql2 $db2->Quary($sql2); while($db2->FetchArray()){ $row2 = $db2->mArray[row2]; $sql3 $db3->Quary($sql3); while($db3->FetchArray()){ $name = $db3->mArray[name]; } } }
関連するQ&A
- sqliteへのデータ追加
sql文で質問です。接続は1-29の表示を確認済み。 掲示板を作る練習をしているのですが、とりあえずpostなどのユーザーから受け取り値をdbに保存・表示する前に、自分で保存(カラムは左から順にid,name,sexになっていてidの1~29は埋まっている状態です。)・表示してみようと思いtest.dbのhumanテーブルに「データの追加」と表記している部分をテーブルに書き込み表示したいのですが、エラーは表示されないもののid30番にデータの追加ができておらず困っています。 データを追加する方法を教えてください。 <?php // 変数の初期化 $db = null; $sql = null; $res = null; $row = null; $db = new SQLite3("test.db"); // データの追加 $sql = 'INSERT INTO human( id, name, sex, ) VALUES ( 30, "吉川", "男", )'; // データの取得 $sql = 'SELECT * FROM human WHERE id BETWEEN 1 AND 50;'; $res = $db->query($sql); while( $row = $res->fetchArray() ) { echo '<ul>'.'<li>'. $row[0] . $row[1] .$row[2].'<li>'.'<ul>';} ?>
- ベストアンサー
- その他(データベース)
- mysqlからphpに表示ですべての項目を出したい
phpとmysqlの勉強をしているのですが、出したい項目がでてきてくれません。 今mysqlでidとnameとpriceの項目を作っているのですが、以下だとどうしてもnameしか出てきてくれません。 どうすれば3つの項目がでてくれますでしょうか? よろしくお願いします。 <? mysql_connect('localhost' , 'root' , '') or die(mysql_error()); mysql_select_db('db1'); mysql_query('SET NAMES UTF8'); $sql="SELECT * FROM syouhin"; $res=mysql_query($sql); $options=""; while($row = mysql_fetch_array($res,MYSQL_ASSOC)){ $options.="<input type=\"radio\" name=\"syouhin1\" value='{$row['id']}' checked> {$row['name']}\n<br>"; } $select="{$options}</select>\n"; print $select; ?>
- ベストアンサー
- PHP
- sqlite3の動作が?xamppでは問題なく
sqlite3の動作が?xamppでは問題なく作動しますが、ロリポップサーバーではFatal errorがでます。ご教授お願い致します。 <?php $db = new SQLite3('fukurou.db'); try { $db = new SQLite3('fukurou.db'); } catch (Exception $e) { print 'DBへの接続でエラーが発生しました。<br>'; print $e->getTraceAsString(); } $results = $db->query('SELECT * FROM syouhin'); while ($row = $results->fetchArray()) { print $row['no']; print $row['name']; print $row['kakaku']; print '<br>'; } $db = new SQLite3('fukurou.db'); $db->close();
- 締切済み
- その他(データベース)
- phpについて
phpのfor文だと思うのですが、エラー(そもそも表示されない)ので教えてください。 sqlでデータを取得し 今まで下記のようにしていましたが、10こ表示したいです。 a タグの中身についても変化させたくて、 ループ1回目はa href="1.php" ループ2回目はa href="2.php" ループ3回目はa href="3.php" いこう10まで (ファイル名は通し番号になっていて、1~10.phpになっています。) phpのプログラムは <?php // 変数の初期化 $db = null; $sql = null; $res = null; $row = null; $db = new SQLite3("test.db"); // データの取得 $sql = 'SELECT * FROM human where country="japan"'; $res = $db->query($sql); <?php while( $row = $res->fetchArray() )(これ10回ループさせたいを) { echo '<ul>' . '<a href="ここを変化させたい。" target=_brank>'. '<li>' . $row[0] . '<span>' , $row[1].'<span>', $row[2].'<span>',$row[3].'<span>', $row[4]. '<span>', $row[5].'<span>' , '<img src="$row[6]">'.'<span>' . '</li>'. '</a>' . '</ul>'; } よろしくお願いいたします。
- ベストアンサー
- PHP
- PHPでMySQLのデータを検索したい
お世話になります。 PHPでMySQLのデータを検索したいと思い、 以下のようにしてみたのですがうまく表示されません。 -- $name = $_POST["name"]; $link = mysql_connect('localhost', '', ''); $db_selected = mysql_select_db('', $link); mysql_set_charset('utf8'); $sql = "SELECT * FROM search WHERE". $name; $result = mysql_query($sql); while($row = mysql_fetch_array($name)) { print $row['name']; } $close_flag = mysql_close($link); -- どう改善すればいいのでしょうか? 初心者の為、少々お見苦しい点があるかと思いますが どうぞよろしくお願いします。
- ベストアンサー
- PHP
- foreachで配列を作る
$array = array("id","name","address","tel","point","a1"); $res = $db->query($sql); //sqlのクエリー while ($row = $res->fetchRow( DB_FETCHMODE_ASSOC )) { $data_list[]=array( $array[0]=>$row["$array[0]"], $array[1]=>$row["$array[1]"], $array[2]=>$row["$array[2]"], $array[3]=>$row["$array[3]"], $array[4]=>$row["$array[4]"], $array[5]=>$row["$array[5]"]); } をforeachを使って $array = array("id","name","address","tel","point","a1"); $res = $db->query($sql); //sqlのクエリー while ($row = $res->fetchRow( DB_FETCHMODE_ASSOC )) { foreach(~){ //処理 } のようにかきかえたいのですがどうしたらいいでしょうか?foreachをしらべていろろやったのですがうまくいきません。よろしくおねがいします。 ちなみに$data_list[]の配列はArray ( [0] => id [1] => name [2] => address [3] => tel [4] => point [5] => a1 ) Array ( [0] => Array ( [id] => 0 [name] => ここあ [address] => 東京 [tel] => 2 [point] => 2 [a1] => 2 ) [1] => Array ( [id] => 1 [name] => 太郎 [address] => 東京 [tel] => 3 [point] => 5 [a1] => あ ) [2] => Array ( [id] => 4 [name] => 五郎 [address] => 東京 [tel] => 0 [point] => 1 [a1] => あああああ ) [3] => Array ( [id] => 5 [name] => 士郎 [address] => 神奈川 [tel] => 26 [point] => 5 [a1] => ああああああああああ ) …となります。
- 締切済み
- PHP
- SQL文で変数の使用
VB6.0でオラクルDBにSQL文を発行したいのですが、 変数の値を使用して更新(update)や追加(insert) 処理を行うときの構文がわかりません。 どなたか教えてください。
- ベストアンサー
- Visual Basic
- 配列へのデータセット方法
AテーブルのnameフィールドをMySQLのSELECT文で読込み、結果のnameフィールドを配列$arynameにセットしたいとおもいます。 配列の結果は、 array([0]=>aaa [1]=>abc [2]=>def [3]=>ggg) となる様にしたいのですが、結果が上手くいきませんでした。 教えてください。 $sql1="SELECT name FROM `A`"; $db->query($sql1); $cnt=1; while($db->next_record()){ $name=$db->f("name"); $aryname=array($name); $cnt++; }
- 締切済み
- PHP
- while()から得られるインデックス..
お世話になります。 whileでSQLデータベースから抽出した一覧(list.php)から、htmlのフォームのラジオボタンを使って SQL上のデータを修正したいと考えていますが、うまくいきません。 list.php------------------------------------------- 1 <? 2 $db = mysql_connect('localhost','user','pass'); 3 $db_name = 'db'; 4 $TBL = "test"; 5 $str_sql = "SELECT * FROM {$TBL}"; 6 $rs = mysql_query($str_sql,$db); 7 $cnt =mysql_num_rows($rs);//データの個数 8 ?> 9 10 <form action="record.php" method="post" name="form1"> 11 <table> 12 <? while($arr_record = mysql_fetch_assoc($rs)){?> 13 <tr> 14 <td> 15 <input name="disp[]" type="radio" value="<? print $arr_record[id];?>"<? if($arr_record[disp] == 1){print" checked=\"checked\"";}?> /> 16 <input name="id[]" type="hidden" value="<? print $arr_record[id];?>"> 17 </td> 18 </tr> 19 <? }?> 20 </table><br /><br /> 21 <input type="hidden" name="cnt" value="<? print $cnt;?>"> 22 <input type="submit" name="Submit" value="Submit" /> 23 </form> list.php ここまで---------------------------------- record.php----------------------------------------- 1 <? 2 $cnt = $_REQUEST['cnt'];//データの個数 3 4 for($i=0;$i<=($cnt-1);$i++){ 5 $disp = $_POST['disp'][$i]; 6 $id = $_POST['id'][$i]; 7 8 if($disp == $id){$disp = 1;}else{$disp = 0;} 9 10 $str_sql = "UPDATE {$TBL} SET disp='{$disp}' WHERE id='{$id}'"; 11 mysql_query($str_sql,$db); 12 } 13 ?> record.php ここまで------------------------------- list.php15行目の <input name="disp[]" type="radio" .. /> は、 record.php5行目の $disp = $_POST['disp'][$i]; で[0][1][2][3]..と値を取得できるものと考えておりますが ここが取得できていないようです。 $disp = $_POST['disp'][0]; ↑これだけは、正しく値が取得できるのですが、[1]以降は取得できていません。 record.php6行目の $id = $_POST['id'][$i];は、[0][2][3]..と取得できているため while文や for文の間違いではないと思うのですが・・。 初心者から本を見ながらの独習のため、基礎的な間違いもあるかと思います。 もう2日も悩んでいます。先輩方よろしくお願いします!!
- ベストアンサー
- PHP
お礼
ありがとうございます。 実際やってみて上手くいきました。 的確なアドバイスにとても感謝してます。