こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

phpでmysqlで作成したdbを表示したい。

現在phpのプログラムの学習を行っています。、
phpmyadminで作成したデータベースを読み込もうとしているのですが、うまくいきません。
参考書やサイトも参考にしたのですが、警告が出ています。
よくわからなくなってきましたので、教えていただきたいです。

-------------------------------------------------------------------------------
・実行結果
Resource id #31Resource id #40
接続ID:
選択の成否:
結果ID:
行数:

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\job\job.php on line 45
-------------------------------------------------------------------------------
・ソース
<?php

/*$con = mysql_connect('localhost','root','root') or die("接続できません");
print "接続に成功しました。";
mysql_close($con);*/

$url = "localhost";
$user = "root";
$pass = "***";
$db = "***";

// MySQLへ接続する
$link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。");

// データベースを選択する
$sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。");

// クエリを送信する
$sql = "SELECT * FROM t01prefecture";
$result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql);

//結果セットの行数を取得する
$rows = mysql_num_rows($result);

//結果保持用メモリを開放する
mysql_free_result($result);

echo "$link";
echo "$sdb";
echo "$result";
echo "$rows";

echo "<br>";
echo "接続ID:<?= $link ?><br />";
echo "選択の成否:<?= $sdb ?><br />";
echo "結果ID:<?= $result ?><br />";
echo "行数:<?= $rows ?><br />";

$recordSet = mysql_query('SELECT * FROM my_items');
while($data = mysql_fetch_assoc($recordSet)){ /*このあたりが45行目 */
echo $data['item_name']; /* ここの値を変える*/
echo '<br>';
}

// MySQLへの接続を閉じる
mysql_close($link) or die("MySQL切断に失敗しました。");

投稿日時 - 2013-08-07 17:15:59

QNo.8209948

すぐに回答ほしいです

質問者が選んだベストアンサー

SELECT * FROM my_items

このクエリの実行に失敗して、$recordSet に FALSE が代入されているだけのことです。
結果をチェックせずにこのようなコードは書いてはいけません。

ちなみにmysql関数は現在「強く非推奨」であり、PDOクラスを使うことが最も推奨されています。
PDOクラスならばSQL実行失敗時に自動的に例外をスローさせることができ、いちいち1回ごとに「 … or die() 」とか書かなくていいのでラクです。
mysql関数を使っているような古い参考書の場合、買い直しを検討してください。

http://ideone.com/xF40Kn


<?php

try {
____
____$host = 'localhost'; // ホスト
____$charset = 'utf8'; // 文字セット
____$dbname = 'test'; // データベース名
____$user = 'root'; // ユーザー名
____$pass = ''; // パスワード
____
____// PDOオブジェクト生成
____$dsn = "mysql:dbname={$dbname};host={$host};charset={$charset}";
____$pdo = new PDO($dsn, $user, $pass, array(
________// SQLエラー時に例外をスロー
________PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
________// fetchやfetchAllのデフォルトフェッチスタイルを連想配列形式にする
________// (mysql_fetch_assocと同じスタイル)
________PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
____));
____
____// t01テーブルとprefectureテーブルの行数合計を取得するSQL
____$sql = 'SELECT COUNT(*) FROM t01 prefecture';
____// 先頭カラムの値を取得して整数にキャスト
____$num = (int)$pdo->query($sql)->fetchColumn();
____
____// my_itemsテーブルのレコードをすべて取得するSQL
____$sql = 'SELECT * FROM my_items';
____// 2次元配列で全件取得
____$rows = $pdo->query($sql)->fetchAll();
____
____// 結果を表示
____echo '<pre>';
____var_dump(
________'t01テーブルとprefectureテーブルの行数合計', $num,
________'my_itemsテーブルのレコード', $rows
____);
____echo '</pre>';
____
} catch (Exception $e) {
____
____// 例外発生時
____echo '<pre>';
____var_dump($e->getMessage());
____echo '</pre>';
____
}


マニュアルに一度目を通してください。

mysql関数
http://www.php.net/manual/ja/ref.mysql.php

pdoクラス
http://php.net/manual/ja/book.pdo.php

投稿日時 - 2013-08-07 18:10:38

お礼

情報ありがとうございます。
図書館で借りてきた本が古すぎたようです。
もうmySQL関数は捨ててPDOを使ってみます。
ありがとうございました!

投稿日時 - 2013-08-09 12:52:39

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問