質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

1916閲覧

PHPでSQLからwhileで情報を出す時に思ったような動作が出ない

extliger

総合スコア30

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/09/14 04:51

編集2016/09/14 06:24

extligerともうします。

今まで経験した事がない状態に出くわしたのでお知恵をお貸し頂きたいのですが
(独学で習得した分・知識不足でしたら申し訳ございません)

DBはもちろん接続している状態で下記を動作させています。

$db_select = "SELECT"; $db_select .= " *"; $db_select .= " FROM "; $db_select .= "table_name"; $db_select .= " WHERE"; $db_select .= " xxx_id = ?"; $db_select .= " and xxx = 1"; $db_select .= " ORDER BY xxxx ASC"; $data = $dbh->prepare($db_select, array('text')); $data->execute(array($xxx_id));

その後 whileで出します。

while($view = $data->fetch(PDO::FETCH_ASSOC)){ print htmlspecialchars($view['xxx_id'], ENT_QUOTES); }

この時に出てくる数字が 1555と1556でした。(これはDBに入っている情報です)
これをただ単に繋いだ数字がほしかったので

while($view = $data->fetch(PDO::FETCH_ASSOC)){ $name_list .= htmlspecialchars($view['xxx_id'], ENT_QUOTES).","; }

私の中では1555,1556と出る予定でしたが
何故かDB上の他のデータと取得し

1445,1447,1555,1556
となってしまいます。

なぜこのような事になるのでしょうか...
PHP5.6.22でやっております。

以上よろしくお願い致します。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shi_ue

2016/09/14 05:06

コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
shi_ue

2016/09/14 05:07

WHEREからすると、実際にどちらが正しいんですか?
extliger

2016/09/14 06:25

実際は1555と1556と出力されるのが正しいです。
guest

回答4

0

ベストアンサー

該当箇所が実行される前に$name_listへ「1445,1447,」という内容が入っているのではないでしょうか。

$name_listという変数を他の場所でも使われていませんか?
或いは、提示されているwhile文はさらに別のループの内側に入っていたりしませんか?

以下のようにwhile文の前に$name_listを初期化してみてください。

PHP

1$name_list = ""; 2while($view = $data->fetch(PDO::FETCH_ASSOC)){ 3$name_list .= htmlspecialchars($view['xxx_id'], ENT_QUOTES).","; 4

投稿2016/09/14 05:09

KaedeKazane

総合スコア408

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

$name_listを適宜初期化後再度実行してみたらどうでしょうか

投稿2016/09/14 05:59

Akirana

総合スコア59

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

状況がよくわからないですがprepare()の第二引数は必要ですか?
$name_listはwhileの直前で初期化していますか?
また、どうしようもない場合は一度FetchAll()で変数に受けた上でやってみてはどうでしょう?

PHP

1$name_list =""; 2$views = $data->fetchAll(PDO::FETCH_ASSOC) 3foreach($views as $key=>$view){ 4$name_list .= htmlspecialchars($view['xxx_id']).","; 56

投稿2016/09/14 05:09

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

$name_listを初期化で対応出来ました。
皆様にベストアンサーをつけさせて頂きたいくらい素早い回答でありがとうござます!

初歩的な部分で申し訳ございません。
お手間を取らせました。

あいがとうございます!

投稿2016/09/14 07:47

extliger

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問