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

解決済みの質問

PHPでのMYSQL接続のデータ表示

PHPのバージョンは4.2.3です。
index.php という一覧表示画面から
一意なKey文字列を受け取りそのデータに合致する
データの詳細を表示する画面です。
実データ部分が表示されず困っています。

実行時のPHPのエラーも出力されないので
いまいちどこが悪いのかわかりません
アドバイスよろしくお願いします。

<?php
require_once( "common.php" );
require_once( "const.php" );
if(! $conn = mysql_connect( 'ホスト名','ユーザー名','PASS')){
die( 'MYSQL接続失敗');
}
$sql = "";
$sql .= "select * from LIVE ";
$sql .= "ORDER BY Date DESC ";
$sql .= "WHERE ID=".$_REQUEST[ "KEY" ];
echo $sql;
mysql_select_db("DB名",$conn);
$rs = mysql_query($sql, $conn);
$DATE=$rs['DATE'];
$TITLE=$rs['TITLE'];
$PLACE=$rs['PLACE'];
$ARTIST=$rs['ARTIST'];
echo $DATE;
echo $TITLE;
echo $PLACE;
echo $ARTIST;
//$rec = mysql_fetch_array( $rs, MYSQL_ASSOC );
?>
<HTML>
<HEAD><TITLE>ライブ予定</TITLE></HEAD>
<BODY><H1 ALIGN="CENTER">ライブ予定詳細</H1>
<A HREF="./">戻る</A>
<TABLE BORDER="1" ALIGN="CENTER" WIDTH="100%">
<TR><TD BGCOLOR="#FFFFCC">日付</TD>
<TD><?php HESC($rec['DATE']) ?></TD></TR>
<TR><TD BGCOLOR="#FFFFCC">タイトル</TD>
<TD><?php HESC($rec['TITLE']) ?></TD></TR>
<TR><TD BGCOLOR="#FFFFCC">場所</TD>
<TD><?php HESC($rec['PLACE']) ?></TD></TR>
<TR><TD BGCOLOR="#FFFFCC">アーティスト</TD>
<TD><?php HESC($rec['ARTIST']) ?></TD></TR>
<TR><TD BGCOLOR="#FFFFCC">本文</TD>
<TD></TD></TR>
</TABLE>
</BODY></HTML>

投稿日時 - 2005-03-30 11:12:55

QNo.1300311

困ってます

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

#3です。
自分の書いた文章が正確じゃなかったので、修正を兼ねて再投稿です。

>IDが数値ではなく文字列

・・数値型ではなく文字列型

と書くべきでした。
いくらIDの内容が数値でも、フィールドがvarcharなどの文字列型で定義されているなら、シングルコーテーションが必要になると思います。

not a valid MySQL result

というエラーが出るということですが、クエリーに失敗して、$rsがfalseになっていると思います。

$sql .= "select * from LIVE where ID='".$_REQUEST['KEY']."' order by Date desc";

試しにこれでクエリーしたらどうでしょうか?

投稿日時 - 2005-04-02 18:55:06

お礼

ありがとうございます。
データ表示されました。
すみません最後に教えてください。
IDのフィールドはMySql上ではInt型で
定義していたのですが、
シングルクォートでくくったらきちんと表示されたのはどうしてなのでしょうか?

投稿日時 - 2005-04-04 00:34:33

ANo.4

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

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

回答(5)

ANo.5

>シングルクォートでくくったらきちんと表示されたのはどうして

うーん、私も専門家じゃないので、詳しいことはわからないんですが、1つ考えられることは$_REQUEST['KEY']に数値以外の値が含まれている可能性ですね。

シングルクォートなしでInt型に文字列を与えるとMySQLはエラーを吐き出しますが、シングルクォートで括って渡してやると自動的に数値以外を削除してクエリーしてくれるそうです。

なので、

where ID = 123a

とするとエラーになりますが、

where ID = '123a'

だと、IDが「123」のデータを抽出します。
でも数字より文字が前にくる場合は「0」になってしまうみたいですね。

原因がこれ以外だとすると、私にもちょっとわからないです。
すみません。

投稿日時 - 2005-04-04 01:28:17

お礼

お礼が遅くなり申し訳ありません。
それで十分です。
いろいろどうもありがとうございました。

投稿日時 - 2005-04-13 02:10:35

ANo.3

先のお二方と同意見ですが、もう1つ挙げるとすれば、IDが数値ではなく文字列の場合、$_REQUEST[ "KEY" ]をシングルコーテーションで括る必要があると思います。

投稿日時 - 2005-04-01 15:48:53

お礼

ありがとうございます。
幸いIDは数値なのでその点は大丈夫だと思います。

投稿日時 - 2005-04-02 09:23:49

ANo.2

間違ってる点を。
1) #1さんの通り、ORDER BYとWHEREが逆です。
2) mysql_query()は結果レコードを返しません。
 結果レコードを得るにはmysql_result()、mysql_fetch_array()等を実行する必要があります。
3)
mysql_fetch_array()等は1回の実行で1行(1レコード)分の情報しか取得しません。whlie(){~}で繰り返す必要があります。

日本語で書かれているページもあるのでPHPのマニュアルを見ましょう。

参考URL:http://jp.php.net/manual/ja/function.mysql-fetch-array.php

投稿日時 - 2005-03-30 12:22:39

お礼

ありがとうございます。
ORDER BYとWHEREを逆にしてmysql_fetch_array()
を実行したところ下の警告メッセージが出てしまいました。
教えて頂いたマニュアルページで確認してみたいと思います。
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

投稿日時 - 2005-04-02 09:26:51

ANo.1

ORDER BY と WHERE の順番を変えてみるとどうなりますか?

投稿日時 - 2005-03-30 11:17:51

お礼

ありがとうございます。
基本的なことでしたね。
実行結果に見た目で変化はなかったので
まだ原因は他にもありそうです。

投稿日時 - 2005-04-02 09:30:23

あなたにオススメの質問