2011-01-14 23 views
1

私は自分のWebサイトで作業しており、次のような機能を実装しようとしています:配列を介してmysqlレコードのデータを取得しますか?

管理者は、支払いを受け取ったことを示すレコードのチェックボックスをチェックします。値は、$paymentrと呼ばれる配列に格納され、この配列はインポルドされ、MySQLデータベースを更新します。それがこの、影響を受けた後、すべてリストアップする必要があり、他の人に1通の電子メールを送信してきたどのように多くの行のコードのチェックを行います後

:トリッキーな部分は(私にとっては、とにかく)の出番

は今ここです配列に格納されているIDに基づいてレコードの情報を取得します。

私は何らかの理由でこれを行う方法を理解しようとしています。私は(それがはるかに長く、複雑であるように私は、クエリを簡素化しているが、私はphpMyAdminの中でそれをテストしている)右のようなものを実行した電子メールのコードの前に実行されているforeachループを持っていた -

foreach ($paymentr as $v) { 

$query = "SELECT transactions.id, transactions.refid, transactions.affid FROM transactions WHERE transactions.id = '$v'"; 

$result = mysql_query($query) or die("Query Failed: ".mysql_errno()." - ".mysql_error()."<BR>\n$query<BR>\n"); 
$trans = mysql_fetch_array($result, MYSQL_ASSOC); 

$transactions .= '<br>User ID:'.$trans['id'].' -- '.$trans['refid'].' -- '.$trans['affid'].''; 

} 

その後、その$トランザクション変数は電子メールコードで送信されます。

しかし、悲しいことに、うまくいきませんでした。誰にもアイデアはありますか?私はちょうど1つの重要な塊またはアイデアを欠いているように感じる...何かが役に立つだろう。たぶんarray_map?私はそれを使用したことはありません。ありがとうございました:)

+0

はすでに何 'のvar_dump($トランス)'プリントを確認しました:デシベル以下に当たっ

print_r ($paymentr); // <----- ADDED FOR DEBUG foreach ($paymentr as $v) { $query = "SELECT id, refid, affid FROM transactions WHERE id = '$v'"; echo $query . "<br/>"; // <----- ADDED FOR DEBUG, (XHTML <br/> closed tag) $result = mysql_query($query) or die("Query Failed: ".mysql_errno()." - ".mysql_error()."<BR>\n$query<BR>\n"); $trans = mysql_fetch_array($result, MYSQL_ASSOC); $transactions .= '<br>User ID:'.$trans['id'].' -- '.$trans['refid'].' -- '.$trans['affid'].''; } 

それとも、あなたがこれを行うことができ、? – middus

+0

もう一度、あなたの思慮深い答えとコメントをありがとう! 私はprint_r($ paymentr)を試しました。右の変数を出力しています。 私もvar_dump($ trans)を試しました。その上にprint_rもあります...そこに何もありません! :/ phpmyadminでmysqlクエリを試してみましたが、正しいレコードを取得できました。 – Sara

+0

また、私のエラーファイルの "foreach()in .... .... in line ... on line 50"の問題に対して、無効な引数が指定されています。これは、$ paymentrを中断したためです。 – Sara

答えて

1

私はあなたのコードを試しましたが、間違ったことに気付かなかった。デバッグを助けるために、 "print_r"と "echo"コードを追加して、何が起こっているのかを知ることができます。

また、あなたの配列は爆破されていると言いました。 [値] [区切り] [値] ...の形式の配列で、 'foreach'が開始されてもそれはまだ配列ですか? $トランザクションが空であることを確認していますか?

foreach ($paymentr as $v) { $in_clause .= "'".$v."',"; } 
$in_clause = trim($in_clause, ","); 
$query = "SELECT id, refid, affid FROM transactions WHERE id IN ($in_clause)"; 

$result = mysql_query($query) or die("Query Failed: ".mysql_errno()." - ".mysql_error()."<BR>\n$query<BR>\n"); 
while ($trans = mysql_fetch_array ($result, MYSQL_ASSOC))  
{ 
    $transactions .= '<br>User ID:'.$trans['id'].' -- '.$trans['refid'].' -- '.$trans['affid'].''; 
} 
+0

もう一度、あなたの思慮深い答えとコメントに感謝します! 私はprint_r($ paymentr)を試しました。右の変数を出力しています。 私もvar_dump($ trans)を試しました。その上にprint_rもあります...そこに何もありません! :/私はphpmyadminでmysqlクエリを試してみました。それが正しいレコードを引っ張ってくれました... – Sara

+0

OH - 私はちょうど啓示を受けました。変数名にimplodeを上書きしています。うーん。爆縮の名前を何か他のものに変更して、これを撃つようにしましょう。 – Sara

+1

はい、それはトリックでした。 Implodeは私の配列を上書きし、foreach()に問題を与えました。それを私の注目に持ってくれてありがとう! – Sara

1

私の前にphp-mysqlマニュアルはありませんが、mysql_fetch_arrayではなく mysql_fetch_assocのようなコールを使用してはいけません。

mysql_fetch_arrayを使用すると、フィールドは文字列としてではなく、$ trans [0]、$ trans ['1]として指定されます。 $ trans ['id']

- 申し訳ありませんが、私は常にフラグではなくmysql_fetch_assocコールを使用します。 sql文のコピーを印刷してクエリウィンドウに貼り付けると、デバッグ文を追加して、正しく実行されたことを確認する方法を教えてください。 他のDB呼び出しは期待どおりに動作しますか?結果が戻ってこない場合があります。

+0

こんにちはJohnさん、私が理解しているところでは、$ result変数の後に "MYSQL_ASSOC"を指定することによってmysql_fetch_assocと同じ方法でmysql_fetch_arrayを使用できます...もしあなたがMYSQL_NUMを書いたなら、数値的に配列を行います。私が間違っている場合私を修正しますか? :) – Sara

+0

型が指定されていない場合、mysql_fetch_array($ con) 'はデフォルトでは' MYSQL_BOTH'を使用します。したがって、配列には通常の数値的にインデックスされた0,1,2,3、関連性のある「id」、「name」などのバージョン。 –

関連する問題