アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHP,MySQLともに初心者です
いろんなサンプルプログラムを見て少しずつ進めているのですが、本3冊にネットで検索しても解決できないので・・・


function getSelect($field,$table,$where){
$query="select $field from $table $where;";
$result=$this->getResult($query);
return $result;
}

$result=$db->getSelect("*","main","where myouji=$_POST[myouji]");
while($row = mysql_fetch_array($result[result])){
echo "$row[id]";
}

こんな感じでmainテーブルからmyoujiに該当するrowを取得したのですが、
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
とエラーが出てしまいます。

他のところで、
$result=$db->getSelect("*","main","where id=$_POST[id]");
$rows=mysql_fetch_array($result[result]);
としたときはエラーなく行くのですが、上のような多次元連想配列(下の方はidを重複させてないので必ずrowが1つ・・・1次元連想配列?)になるとエラーになってしまいます。

これはどう修正すればいいのでしょうか。
たったこれ1行のつまづきで4時間くらいかかってます。
誰か助けてください

A 回答 (2件)

まず$resultは多次元配列ではなく、1次元の配列です。


多次元配列は$hoge[a][b](この場合は2次元)のようなものを差します。

$resultにmysql result型が配列として設定されていることを前提とします。
mysql_fetch_assoc関数はマニュアルにも書かれているとおり
mysql result型の変数しか受け付けませんので、まず配列という時点でアウトです。
foreach(result as $value)
{
while($row=mysql_fetch_assoc($value)
{
...
}
}
のように配列を展開して処理する必要があります。

ところでgetResultの中身が記載されていないのでよく分かりませんが、
複数回mysql_query関数を発行しているのでしょうか?
1回しか発行していないのなら複数行の結果を取得する場合でも配列にする必要は無いんですが。
>while($row=mysql_fetch_assoc(...
という処理で、mysql_fetch_assocを呼び出す度に1行ずつqueryの結果を取りだします。
全ての結果が取り出し終わるとmysql_fetch_assocはnullを返してくるので
whileのループから抜け、安全に全ての結果を処理できるロジックになっています。

あと$result[result]が何を期待しているのかが分かりません。
「なぜ、$foo[bar] は使用できないのか?」を検索して
記述方法を改めるようにして下さい。

この回答への補足

回答ありがとうございます。
なにぶん初心者なもので、お答えを理解するのにも時間がかかっております。
>「なぜ、$foo[bar] は使用できないのか?」を検索して
意味が理解できてないので、もう少し勉強します


ちなみにgetResultの中身です。
function getResult($query){
$result[result]=mysql_query($query,$this->connect);
$result[count]=@mysql_num_rows($result[result]);
return $result;
}

>あと$result[result]が何を期待しているのか
期待するというより、サンプルコードを参考に見よう見まねってところでまだ何も分からず書き進めています。
要は、mainテーブルのmyoujiが一致する複数のレコードを取得し、その中をばらして表示したいだけなのですが・・・
やりたいことは初歩中の初歩なのですが、こんなところでつまずいてしまってます。

補足日時:2009/11/23 09:15
    • good
    • 0

getResultの内容を拝見しました。


$resultはmysqlの結果リソースと結果の行数を持つ1次元の連想配列ということですね。
でしたら、ロジック的には問題なさそうです。
そうするとやはり$result[result]の解釈があやしい気がします。
とりあえず全ての$result[result]を$result['result']という風に
連想配列の添え字を引用符で囲ってみて下さい。
$result[count]も同様に。
    • good
    • 0
この回答へのお礼

おつきあい頂き、感謝します。
解決しました。

お礼日時:2009/11/23 12:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!