• 締切済み

MYSQLから複数の情報を取得する

inputに入力されたアドレスにメールを送るプログラムです。 メールの内容はmysqlにあるmailカラムの情報と一致したレコードのbunカラムの情報を送信します。 $mail = 'aaa@gmail.com'; $dbServer = ''; $dbUser = ''; $dbPass = ''; $dbName = ''; $flag = TRUE; // MySQLデータベースに接続 if (!$link = mysql_connect($dbServer, $dbUser, $dbPass)) { $flag = FALSE; } $sql = "SELECT * FROM table_t WHERE `mail` = '$mail' LIMIT 1"; $query = mysql_query($sql, $link); $row = mysql_fetch_array($query,MYSQL_ASSOC); if ($row[key]) { // 送信する mail($mail, 'kenmei', $row[key]); } このように作ってきたのですが、mailカラムの情報を一意じゃなくして、2つ該当するレコードがあった場合、2つのkeyを1通のメールにして送りたいと考えてます。 どのように書き換えればいいでしょうか? 環境は、さくらサーバーを使用しています。 よろしくおねがいします。

  • PHP
  • 回答数1
  • ありがとう数6

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

いまだにmysql系の関数を使っているのはいただけませんが (せめてmysqli系にシフト、もしくはPDOで) とりあえず考え方だけ >$row = mysql_fetch_array($query,MYSQL_ASSOC); をwhileで回す。 while($row = mysql_fetch_array($query,MYSQL_ASSOC)){ mail($mail, 'kenmei', $row[key]); } むしろ、ほとんどの場合fetchしたデータは常にwhileで得る方が現実的

関連するQ&A

  • PHPの勉強をしています。助けてください。

    PHPの勉強をしています。 phpMyAdminからcodeだけをよんで、PHPにデータを表示するプログラムを書いています。 こんな感じで書いているのですが、2月までできて3月をつけたすとエラーが起きて何も映らなくなります。 ↓ソースコードです。 <? $dbServer = "サーバーの名前"; $dbUser = "ユーザー名"; $dbPass = "パスワード名"; $dbName = "データベース名"; $flag = TRUE; if(!$link = mysql_connect($dbServer, $dbUser, $dbPass)){ $flag = FALSE; } else if (!mysql_select_db($dbName, $link)){ $flag = FALSE; } if($flag == TRUE){ $sql = sprintf("SELECT * FROM tanzyouseki WHERE code = '%d'", mysql_real_escape_string('1')); $sql2 = sprintf("SELECT * FROM tanzyouseki WHERE code = '%d'", mysql_real_escape_string('2')); $sql3 = sprintf("SELECT * FROM tanzyouseki WHERE code = '%d'", mysql_real_escape_string('3')); $query = mysql_query($sql, $link); $query2 = mysql_query($sql2, $link); $query3 = mysql_query($sql3, $link); echo '<br/>'; while($row = mysql_fetch_object($query)){ while($row2 = mysql_fetch_object($query2)){ while($row3 = mysql_fetch_object($query3)){ $page=intval($_REQUEST['page']); $image=array("ganet.jpg","amesisuto.jpg","aqua.jpg"); $sport=array($row->jewelname,$row2->jewelname,$row3->jewelname,); $word=array($row->jeweltext, $row2->jeweltext, $row3->jeweltext,); $page+1; $page1 = $page +1; $page2 = $page -1; } } } } else { echo 'エラー'; } function h($string){ return htmlspecialchars($string); } ?> <table width="500" border="1"> <tr> <td><button><? if($page>0){ print ('<a href=jewel.php?page='.$page2.'>');}else{} ?>次の月へ</a></button> <button><? if($page<1){ print ('<a href=jewel.php?page='.$page1.'>');}else{} ?>前の月へ</a></button></td> </tr> <tr> <caption><? print ($jewel[$page]); ?></caption> </tr> <tr> <td><? print ('<img src='.$image[$page].'>'); ?></td> </tr> <tr> <td><? print ($word[$page]); ?></td> </tr> </table> どこが間違っているのか教えてください。 ↓データベースの内容です。 code || tuki || jewelname || jeweltext || 1 1月 ガーネット 真実・友愛・忠実 2 2月 アメシスト 誠実・心の平和 3 3月 アクアマリン 沈着・勇敢・聡明 わかる方よろしくお願いします。

    • ベストアンサー
    • PHP
  • php+MySqlでの検索結果について

    以下のソースで検索結果が表示されるのですが、検索結果が多数ある場合、例えば10件ずつ表示して「次へ」「前へ戻る」「最終頁」等のリンクを貼る方法が分かりません。 また、検索結果から並べ替え(データの更新日時等から)も出来ればと思い質問させていただきました。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>検索</title> </head> <body> <?php # 入力値に不正なデータがないかなどをチェック。 function checkInput($var) { if (is_array($var)) { return array_map('checkInput', $var); } else { if (get_magic_quotes_gpc()) { // magic_quotes_gpc対策 $var = stripslashes($var); } if (preg_match('/\0/', $var)) { // NULLバイト攻撃対策 die('不正な入力です。'); } if (!mb_check_encoding($var, 'UTF-8')) { // 文字エンコードの確認 die('不正な入力です。'); } return $var; } } function h($string) { // HTMLでのエスケープ処理をする return htmlspecialchars($string, ENT_QUOTES); } # POSTされたデータをチェック。 $_POST = checkInput($_POST); // データベース設定 $dbServer = 'localhost'; $dbUser = 'user'; $dbPass = 'password'; $dbName = 'sample'; $flag = TRUE; // MySQLデータベースに接続 if (!$link = mysql_connect($dbServer, $dbUser, $dbPass)) { $flag = FALSE; } // データベース選択 else if (!mysql_select_db($dbName, $link)) { $flag = FALSE; } // 文字エンコードの指定(PHP5以降かつMySQL 4.1以降) else if (!mysql_set_charset('utf8', $link)) { $flag = FALSE; } # $flagの値の判定 if ($flag === FALSE) { echo 'データベースエラー'; } else if (isset($_POST['data'])) { $data = $_POST['data']; $dataList = explode(' ', mb_convert_kana($data, 's')); $sql = 'SELECT * FROM search WHERE 1'; foreach ($dataList as $word) { if ($word == '') continue; $sql .= sprintf(" AND data LIKE '%s'", '%' . mysql_real_escape_string($word) . '%'); } echo '<p>SQL: ' . h($sql) . '</p>'; $query = mysql_query($sql, $link); if (!$query) { echo 'データベースエラー'; } else if (mysql_num_rows($query) == 0) { echo '<p>「' . h($data) . '」はデータベースに登録がありません。</p>'; } else { echo '<p>「' . h($data) . '」はデータベースに登録がありました。</p>'; echo '<p>検索結果</p>'; echo '<table border="1">'; echo ' <tr>'; echo ' <th>ID</th>'; echo ' <th>データ</th>'; echo ' </tr>'; while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) { echo ' <tr>'; echo ' <td>' . h($row['id']) . '</td>'; echo ' <td>' . h($row['data']) . '</td>'; echo ' </tr>'; } echo '</table>'; } $sql = 'SELECT * FROM search'; $query = mysql_query($sql, $link); if (!$query) { echo 'データベースエラー'; } else { echo '<p>データベースの内容一覧</p>'; echo '<table border="1">'; echo ' <tr>'; echo ' <th>ID</th>'; echo ' <th>データ</th>'; echo ' </tr>'; while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) { echo ' <tr>'; echo ' <td>' . h($row['id']) . '</td>'; echo ' <td>' . h($row['data']) . '</td>'; echo ' </tr>'; } echo '</table>'; } } ?> <form method="post" action=""> <p>検索ワードを入力して下さい</p> <input type="text" name="data" /> <input type="submit" value="検索する" /> </form> </body> </html> このソースのどの部分に記述してよいのか等も含めてご伝授頂きたく思います。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • phpでのmysqlからjsonファイルの変換

    <? php   include("mysql2json.class.php");   //MySQL接続設定 define("DBSV", "PHPSRV"); define("DBNAME", "koukin"); define("DBUSER", "root"); define("DBPASS", "");   //MySQL接続 $conn = mysql_connect(DBSV, DBUSER, DBPASS) or die(); mysql_query("SET NAMES utf8",$conn); mysql_select_db(DBNAME, $conn);   //SQLクエリの発行 $num=0; $sql = "SELECT * FROM komento"; $result = mysql_query($sql, $conn); $num=mysql_affected_rows();   // クラスを呼び出して出力 $objJSON=new mysql2json(); print(trim($objJSON->getJSON($result,$num)));   ?> というプログラムをあるサイトを参考にさせてもらってしようさせてもらっているのですが、なぜか実行すると、getJSON($result,$num))); ?>としか出力されません。 どうしてでしょうか?

    • ベストアンサー
    • PHP
  • php5+mysqlのSELECT文でwhere句を指定すると正しく動

    php5+mysqlのSELECT文でwhere句を指定すると正しく動きません。 レコード数を取得します。 ここで、field10(category)=text型の値に基づきレコード数を取得したいのですが、 $sql="select * from A where B='C'"; とするとレコード出力(index.php)で0を出力。 where句を指定せずに $sql="select * from A"; とするとレコード出力(index.php)で97を出力。 文字コード関係のQ&Aサイトを見ましたが、phpファイルの冒頭部分に $con = mysql_connect($DBSERVER, $DBUSER, $DBPASS); mysql_query("SET NAMES 'sjis'"); $selectdb = mysql_select_db($DBNAME, $con); を指定しています。 テーブルAに含まれるデータは、csv(,区切り)で、load data infile・・・しました。 ※Records:97 Deleted:0 Skipped:0 Warnings:0 他に考えられる原因・対処方法はありますでしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • どうかお助けください。

    MySQLと連動した簡単なプログラムがどうしても必要なのですが自分の力ではどうにもなりません。お助けください。 作成したいのは引数からレコードを区別し指定したカラムを書き換えるものです。 たとえば、aというカラムと r というカラムがあります。 a は初め0という値が入っており r には(ランダムな値)が入っています。check.php?id=(ランダムな値 = rです。)でアクセスすると初めに引数からrを取得しrと同じレコード内にあるaを調べます。ここに0が入っていたら0を1にUPDATEしはじめから1が入っていたらメッセージを出したいと思います。また、rも同様にデータベース内に同一のランダムな値がない場合はメッセージを出したいと考えています。 以下は私の乏しい知識で作成したソースです。(動きません。) $r = $_GET['id']; $dbhost = ""; $dbuser = ""; $dbpassword = ""; if (!$conn = mysql_connect($dbhost, $dbuser, $dbpassword)){ die("Error<br />"); } mysql_select_db("", $conn); $row = mysql_query(SELECT * FROM table WHERE r = '{$r}'); if($row["r"] != $key){ echo("メッセージ"); }elseif($row["a"] == 1){ echo("メッセージ"); }elseif($row["a"] == 0){ mysql_query(UPDATE table SET a = '1' WHERE r = '{$r}'); echo("OK"); }else{ echo("Error"); } どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • mySQLで結果が無いときの処理

    $sql = "select * from test "; $sql .= "where id='".$_POST["id"]."' and pwd='".$_POST["pwd"]."'"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { if($row){ $msg = "OK"; } } としていますが、NGのときってどういう風にしたらいいのでしょうか? 基本的なことですみませんが、教えてください。

    • ベストアンサー
    • PHP
  • mysql_num_rowsを使わず、SQL文のCOUNT関数で件数を得たい

    以下のサンプルを実行すればうまくいくのですが、 $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from mytable where number = 10"; $rst = mysql_query($sql, $con); $countnum = mysql_num_rows($rst); echo $countnum . "件のレコードがありました。<br>"; ◆実行結果: 10件のレコードがありました。 「10件のレコードがありました。」という一行の実行結果を得たい目的なら、 三行目を「$sql = "select count(*) from mytable where number = 10";」 みたいにCOUNT関数を使っても結果が得られそうに思います。 というかむしろ、その方がコードが短くて済みそうな気がするのですけど。 その場合、4~6行目のPHPコードはどのように記述したらいいでしょうか。 echo $rst; としても、変な文字列を返してきました。

    • ベストアンサー
    • PHP
  • phpでのsql文で変数を使う

    POSTで受け取った文字列を,テーブル名として新規テーブルを作成したいのですが,sql文発行の際の変数の記述方法がわかりません。 ネットや本に書いてある方法は一通りためしたのですが,失敗しましたとなります。 ご教授下さい。 php 5.2.3 apache2.2.4 mysql 5.0.45 <?php require_once("../dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASS); $selectdb = mysql_select_db($DBNAME, $con); $name = $_POST['name']; $sql = "create table $name ( qno int(3), qcontents text(500))"; $rst = mysql_query($sql,$con); if($rst){ echo $name . "を作成しました。"; }else{ echo "データベースの作成に失敗しました。"; } ?>

    • ベストアンサー
    • PHP
  • MYSQLでgroup by を教えてください。

    まだ初心者なんです。よろしくお願いいたします。 テーブル$tbl_nameに日付date コラムに (2009-11-3 14:25:06).(2009-11-3 11:25:06). (2009-11-5 12:25:06).(... ....と年齢 ageコラムに (18)(19)(20)... 性別コラムage に (danshi)(jyoshi) が入っています。 これを日付別 に内容が存在するだけ出力したいのです。 出力内容は(18)→25、(19)→13、(20)→7、の数だけ、 同様に(danshi)→20、(jyoshi)→25、というように 〇月〇日18才は25人、19才は13人、20才は7人、 男子は20人、女子は25人と出したいのです。 $sql = "SELECT 'age',count(age) FROM $tbl_name group by 'date'"; $result = mysql_query($sql, $db) or die("クエリの送信に失敗しました。<br />SQL:".$sql); while ($row = mysql_fetch_assoc($result)){ $age .=$row;} 等記入しているのですが、何とも動きませんのです。 どうしたらよろしいものでしょう。よろしくお願いいたします。

  • Mysql UPDATE出来ません

    PHP+MySQLでホームページ開発中ですが、MySQLで特定idのフィールドの更新処理(UPDATE)が出来ません。初心者です宜しくお願いします。 【Mysqlで確認した点】 (1)XAMPP・MyAdminからは以下のSQL文で問題なく更新できる。 "UPDATE upload_list SET rem='ABCDEF' WHERE id=15;" 【問題は?】 以下のphpからは更新できません。 【phpで確認した点は?】 (1)DBへ正常に接続してる。 (2)文字コードも正常にSETしてる。 (3)UPDATE実行後の$RESULT(返り値)がない。 (4)PHPを実行後、MyAdminでDBを確認しても更新されていない。 【phpコード】 <?php //データベースパラメータ定義 $DBSERVER="localhost"; $DBUSER="root"; $DBPASSWORD=""; $DBNAME="up_load"; $DATANAME="upload_list"; //Mysqlに接続 if(mysql_connect($DBSERVER,$DBUSER,$DBPASSWORD)) {echo "DB接続済/";} else {echo "<h2>データベースに接続できません</h2>";die();} //Mysql停止 //データベースを選定 mysql_select_db($DBNAME); //Mysqlの文字セットを定義 $sql = "SET NAMES ujis;"; $result = mysql_query($sql); if ($result==true){echo "文字コードSET済/";} //更新id、rem(更新記事)をSET $id=15; $new_rem="ABCDEF"; echo $DATANAME."/".$id."/".$new_rem."/"; //Mysql更新処理 $result=mysql_query('UPDATE $DATANAME SET rem=$new_rem WHERE id=$id;'); if ($result==true){echo "更新!";} else {echo "更新出来ず";} //XAMMP phpMyAdminからは以下のSQL文で更新できた。 //UPDATE upload_list SET rem='ABCDEF' WHERE id=15; ?> 【実行後のブラウザ表示】 DB接続済/文字コードSET済/upload_list/15/ABCDEF/更新出来ず

    • ベストアンサー
    • MySQL