• 締切済み

PHPでMySQLのストアドプロシージャを実行するには?

こんにちは、この件でいろいろ検索していたのですが ストアドの作成まではできているのですが、PHPからの 実行のさせ方がわからず質問させていただきました。 環境は、PHP 5.2.9 + MySQL5.1.32 で MySQLでストアドプロシージャを作成して、実行できるのですが これをphpから実行させたいのですが、どのように記述すればよいのかわからず悩んでおります。 実行したいストアドは Gen_rank という名前でコンソールから実行できることは確認しています。 下記のようにしてみましたが、ストアドは走りませんでした。 <?php require_once("db_connect.php"); // クエリを送信する $sql = "call Gen_rank();"; $sql = "SELECT id, name, phonetic, age, s4, s9, rank FROM tmp_records ORDER BY rank"; $result = executeQuery($sql); // 結果セットの行数を取得する $rows = mysql_num_rows($result); // 表示するデータを作成 if($rows){  while($row = mysql_fetch_array($result)) {   $tempHtml .= "<tr>";   $tempHtml .= "<td>".$row["id"]."</td><td>".$row["name"]."</td><td>".$row["phonetic"]."</td><td>".$row["age"]."</td><td>".$row["s4"]."</td><td>".$row["s9"]."</td><td>".$row["rank"]."</td>";   $tempHtml .= "</tr>\n"; }  $msg = $rows."件のデータがあります。"; }else{  $msg = "データがありません。"; } // 結果保持用メモリを開放する mysql_free_result($result); ?>

  • 3ryu
  • お礼率50% (3/6)
  • PHP
  • 回答数2
  • ありがとう数0

みんなの回答

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.2

えーと 何でexecuteQueryを使っているんでしょうね? これはSQL Serverでの関数なんですが。 MySQL使っているなら それ専用の関数を使ってください。 ハタさんのブログ pdo で Procedure の call. MySQL 編 http://blog.xole.net/article.php?id=711

3ryu
質問者

補足

> executeQueryを使っているんでしょうね? > これはSQL Serverでの関数なんですが。 知りませんでした。 require_once("db_connect.php"); にて呼び出しているのがたまたまexecuteQueryという名前だった ということで勘弁してください。 <?php function executeQuery($sql){  $url = "localhost";  $user = "hoge";  $pass = "sample";  $db = "test";  // MySQLへ接続する  $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。");  // データベースを選択する  $sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。");  // クエリを送信する  $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql);  // MySQLへの接続を閉じる  mysql_close($link) or die("MySQL切断に失敗しました。");  //戻り値  return($result);  } ?>

  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.1

>下記のようにしてみましたが、ストアドは走りませんでした。 走らなかったことを、どのようにして確認されましたか? 何かエラーメッセージが出たのですか? ところで、 >$sql = "call Gen_rank();"; >$sql = "SELECT id, name, phonetic, age, s4, s9, rank FROM tmp_records ORDER BY rank"; 前の文でセットした$sqlの内容を、後ろの文で上書きしています。 その結果、この2つの文を実行した時点での$sqlの内容は、 "SELECT id, name, phonetic, age, s4, s9, rank FROM tmp_records ORDER BY rank" となっています。 こうなることをお望みなのでしょうか?

3ryu
質問者

補足

ありがとうございます。 > 走らなかったことを、どのようにして確認されましたか? s9の値を変更してみてから このコードが書かれているphpを実行してみたところ 変更は反映されていませんでしたので、ストアドは走らなかったと 判断しました。 >前の文でセットした$sqlの内容を、後ろの文で上書きしています。 >その結果、この2つの文を実行した時点での$sqlの内容は、 >"SELECT id, name, phonetic, age, s4, s9, rank FROM tmp_records >ORDER BY rank" >となっています。 >こうなることをお望みなのでしょうか? いいえ、これが上書きになるとは思っていませんでした。 期待していた動作は $sql = "call Gen_rank();";でストアドが実行され で、次にその結果を返す選択クエリ $sql = "SELECT id, name, phonetic, age, s4, s9, rank FROM tmp_records ORDER BY rank"; が実行される は・ず・でした。知識不足でお恥ずかしい限りです。 そこで $sql = "call Gen_rank();"; $result = executeQuery($sql); $sql = "SELECT id, name, phonetic, age, s4, s9, rank FROM tmp_records ORDER BY rank"; $result = executeQuery($sql); というふうに実行してみたところ ブラウザには クエリの送信に失敗しました。 SQL:call Gen_rank(); メッセージが表示されています。

関連するQ&A

  • 2つのMySQLのテーブルをPHPで同じ行に表示

    MySQL クライアントのバージョン: 5.0.45 phpMyAdmin バージョン情報: 3.2.4-rc1 でデータベースを作成しております。 簡単な例ですが、 PRIMARY=id PHPのテーブルを下記のように表示させたい場合。 ┼─┼──┼──┼ │id │add │name│ ┼─┼──┼──┼ │0 │東京 │田中│ ┼─┼──┼──┼ │1 │長野 │鈴木│ ┼─┼──┼──┼ │2 │大阪 │佐藤│ ┼─┼──┼──┼ │3 │山口 │井上│ ┼─┼──┼──┼ idを共通にしていれば、 「add」はtable1、「name」はtable2の情報を 上記のように表示することは可能なのでしょうか? もし可能であれば、この表示の仕方の名称を教えていただけないでしょうか? (調べるときの検索ワードが分からなくて…すみません) 必要かわかりませんが、PHP上で表示する表の部分はこのように作成しています。 $result = executeQuery($sql); $rows = mysql_num_rows($result); if($rows){ while($row = mysql_fetch_array($recordSet)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["id"]."</td>"; $tempHtml .= "<td>".$row["add"]."</td>"; $tempHtml .= "<td>".$row["name"]."</td>"; $tempHtml .= "</tr>\n"; } $msg = $rows."件みつかりました"; }else{ $msg = "0件です"; } 経験が浅く、お伝わりにくいことがあったら、申し訳ございません。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPとMySQLについて

    PHPとMySQLについて PHP、MySQLともに初心者の者です。 ネットの情報を参考に以下のようなプログラムを作成しました。 <?php //ファイルを読み込み require_once("DB47.php"); // クエリを送信する $sql = "SELECT * FROM japanDB ORDER BY PREF_CD"; $result = executeQuery($sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //表示するデータを作成 if($rows){ while($row = mysql_fetch_array($result)) { $tempHtml .= "".$row["PREF_CD"]." ".$row["PREF_NAME"]." "; $tempHtml .= "\n"; } $msg = $rows."件のデータがあります。\n\n"; }else{ $msg = "データがありません。\n\n"; } //結果保持用メモリを開放する mysql_free_result($result); ?> <?= $msg ?> <?= $tempHtml ?> これはデータベースに 1、北海道 2、青森 ・  ・ ・  ・ ・  ・ 47、沖縄 といった情報を与えており、PHP側でMySQLに接続し、その内容をコマンドプロンプト上で表示するといったものです。 しかし、PHPプログラムを実行してしまうと、全データが一気に表示されてしまうので、見づらいものとなっています。 そこで、地名や番号を入力すれば、地名を表示するような検索機能を付けたいのですが、PHPからMySQLデータベース内を検索する方法が分かりません。検索機能をこのプログラムに組み込みたいのですが・・・。 どなたかご教授お願いいたします。 ***環境*** OS : Windows XP Pro PHP4.2.3 、MySQLインストール済み **********

    • ベストアンサー
    • PHP
  • mysqlの文字化け

    お世話になります。 phpmyadminを使用しており、php内からmysqlに接続しているのですが テーブル内の結果が「????」となり文字化けしてしまいます。 phpmyadmin上では正常に日本語データが表示されます。 テーブルの文字コード:utf_general_ci ソースは以下です。 <?php ~DB接続省略~ // クエリを送信する $sql = "SELECT * FROM table"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //表示するデータを作成 while($row = mysql_fetch_array($result)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["YMD"]. "</td><td>".$row["NAME"]. "</td><td>".$row["OBJECT"]. "</td>"; $tempHtml .= "</tr>\n"; } //結果保持用メモリを開放する mysql_free_result($result); // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。"); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>全件表示</title> </head> <body> <h3>全件表示</h3> <?= $msg ?> <table width = "200" border = "0"> <tr bgcolor="##ccffcc"><td>YMD</td><td>NAME</td><td>OBJECT</td></tr> <?= $tempHtml ?> </table> </body> </html> よろしくお願いします。

    • 締切済み
    • PHP
  • MySQL+PHPでキーワード検索をもとに五十音検索を作りたいです

    キーワード検索のソースを元に五十音検索を作りたいです。 キーワード検索のソースを元に五十音検索を作りたいのですが、”あ”という文字を押したら”あ”の頭文字の一覧が出るようにするにはどうしたらいいでしょうか。 キーワード検索ではすでにキーワードを入れたら検索結果の一覧が出るようになっています。 以下が必要そうなコードの抜粋です。 <?php //抽出条件を組み立てる $array = explode(" ", $keyword); $cnt = count($array); $where = "WHERE "; for($i=0; $i < $cnt; $i++){ $where.= "koji OR kana LIKE '%".$array[$i]."%'"; if($i < $cnt-1){ $where .=" ".$searchSelect." "; } } // クエリを送信する $sql = "SELECT * FROM sampletable ".$where; $result = executeQuery($sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //表示するデータを作成 if($rows){ while($row = mysql_fetch_array($result)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row[no]."</td><td><A href='result2.php?koji=$row[koji]' target='_blank'>".$row[koji]."</A></td><td>".$row[kana]."</td>"; $tempHtml .= "</tr>\n"; } $msg = $rows."件のデータがあります。"; }else{ $msg = "データがありません。"; } ?> <h3>キーワード検索</h3> 故事成語用検索フォーム(複合語検索ができます) <form name="form2" action="search2.php" method="post"> <input type="text" name="keyword" size="25"> <input type="submit" name="search2" value="検索"><br /> </form>

    • 締切済み
    • PHP
  • PHP+MySQL テーブルが表示されない

    下記のように、MySQLのデータをPHPでテーブル形式で表示しています。 【PHP部分】 $check_sql = "SELECT * FROM table WHERE ( check1 LIKE '%東京%' OR check2 LIKE '%品川%' OR check3 LIKE '%%' ) AND hinichi > NOW( )"; $check_recordSet = mysql_query($check_sql); $check_rows = mysql_num_rows($check_recordSet); if($check_rows){ while($check_row = mysql_fetch_array($check_recordSet)) { $checktable = "<tr>"; $checktable .= "<td>".$check_row["check1"]."</td><td>".$check_row["check2"].$check_row["check3"]."</td>"; $checktable .= "</tr>\n"; } $msg = $check_rows."件みつかりました"; } 【HTML部分】 <?= $msg ?> <table> <?= $checktable ?> </table> $checktable が表示されないのですが、 どうも間違えている箇所がわかりません。 $msgは表示されます。 また、$check_sqlは、PHPMyAdmin上で試していますが、エラーは出ておりません。 ご存じの方いらっしゃいましたら、ご教授お願い致します。

    • ベストアンサー
    • PHP
  • PHP+MySQLを実行するとエラーが出てパソコンがフリーズする。

    次のphpを実行すると、求めるデータは表示出来ますが、その下に引き続き Warnning:mysql_result()[function.mysql_result]: Unable to jump to row 7 on MySQL result index 3 in C:****test.php on line 10; 同文で on line 11; 以下,Unable to jump toの 「 row 7」 が row 8 row 9・・・・・・ と延々と続き、パソコンがフリーズしてしまいます。 実行したphp文。 <?php $con=mysql_connect(localhost,"root","root"); $selectdb=mysql_select_db("sales",$con); $sql="select * from sample"; $result=mysql_query($sql,$con); $row=mysql_fetch_array($result); $price=mysql_result($result,$i,1); $volume=mysql_result($result,$i,2); echo("$price:$volume<br>\n"); mysql_close($con); ?> 参考書を調べて、いろいろ変えてみましたが、分かりません。 幼稚なphp文で恐縮ですが、悪いところをご指摘頂ければ有難いです。

    • ベストアンサー
    • PHP
  • アラートでyes noを作りたいです。

    PHP初心者です。よろしくお願いいたします。 ネット上で、いろいろ勉強していて、次のようなコードを見つけました。 <?php $url = "localhost"; $user = "root"; $pass = ""; $db = "SampleDB050"; // 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); //表示するデータを作成 if($rows){ while($row = mysql_fetch_array($result)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["PREF_CD"]."</td><td>".$row["PREF_NAME"]."</td>"; $tempHtml .= "<td><a href=\"update.php?cd=".$row["PREF_CD"]."\" target=\"_self\">更新</a></td>"; $tempHtml .= "<td><a href=\"delete.php?cd=".$row["PREF_CD"]."\" target=\"_self\">削除</a></td>"; $tempHtml .= "</tr>\n"; } $msg = $rows."件のデータがあります。"; }else{ $msg = "データがありません。"; } //結果保持用メモリを開放する mysql_free_result($result); // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。"); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS"> <title>全件表示</title> </head> <body> <h3>全件表示</h3> <?= $msg ?> <table width = "300" border = "1"> <tr bgcolor="##ccffcc"><td>PREF_CD</td><td>PREF_NAME</td><td colspan="2">EDIT</td></tr> <?= $tempHtml ?> <form action="insert.php" method="post"> <tr> <td><input type="text" name="cd"></td> <td><input type="text" name="name"></td> <td colspan="2"> <input type="submit" name="submit" value="追加"><input type="reset" value="リセット"> </td> </tr> </form> </table> </body> </html> この上のコードの、更新と削除を行うときに、Javascriptで、yes, no のアラートを出したいのですが、ちょうどデーターベースから引っ張ってきているところなので、このコードをどう変えればよいのかわかりませんでした。基本的なことを聞いてしまっているかもしれませんが、よろしくご教授願います。できるだけ、具体的にお願いします。

    • ベストアンサー
    • PHP
  • 文字化け お名前comサーバー

    MySQL サーバ: cgidb05.gmoserver.jp (cgidb05.gmoserver.jp via TCP/IP) サーバのバージョン: 5.0.51a-log プロトコルバージョン: 10 ユーザ: sd_dba_MTA0NzUz@cgi07.unix.internal-gmo MySQL の文字セット: UTF-8 Unicode (utf8) Web サーバ Apache/2.2.9 (Unix) mod_ssl/2.2.9 OpenSSL/0.9.8l MySQL クライアントのバージョン: 5.0.67 PHP 拡張: mysqli phpMyAdmin バージョン情報: 3.3.1 select.php文 <?php $url = "cgidb05.gmoserver.jp"; $user = "sd_dba_MTA0NzUz"; $pass = "ifsaBUD8"; $db = "sddb0033532200"; // MySQLへ接続する $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); // データベースを選択する $sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。"); // クエリを送信する $sql = "SET NAMES utf8"; $sql = "SELECT * FROM kanri"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //表示するデータを作成 $sql = "SET NAMES utf8"; if($rows){ while($row = mysql_fetch_array($result)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["mailadd"]."</td><td>".$row["pass"]."</td><td>".$row["name"]."</td>"; $tempHtml .= "<td><a href=\"update.php?cd=".$row["mailadd"]."\" target=\"_self\">更新</a></td>"; $tempHtml .= "<td><a href=\"delete.php?cd=".$row["mailadd"]."\" target=\"_self\">削除</a></td>"; $tempHtml .= "</tr>\n"; } $msg = $rows."件のデータがあります。"; }else{ $msg = "データがありません。"; } //結果保持用メモリを開放する mysql_free_result($result); // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。"); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>全件表示</title> </head> <body> <h3>全件表示</h3> <?= $msg ?> <table width = "300" border = "1"> <tr bgcolor="##ccffcc"><td>mailadd</td><td>pass</td><td>name</td><td colspan="3">EDIT</td></tr> <?= $tempHtml ?> <form action="insert.php" method="post"> <tr> <td><input type="text" name="cd"></td> <td><input type="text" name="name"></td> <td><input type="text" name="name"></td> <td colspan="3"> <input type="submit" name="submit" value="追加"><input type="reset" value="リセット"> </td> </tr> </form> </table> </body> </html> csvには漢字、かな 共に吐き出し正常。PDF、ブラウザだと???になります。 どなたかよろしくお願いします。

  • 検索結果($_POST)が2ページ目以降は消える

    PHP+MySQLで分割ページを作っています。 検索結果のページを分割しているのですが、2ページ目以降に検索されたレコードが表示されません。 1).2ページ目以降に続きのレコード(下記では21件目以降)を表示させるには、どうすれば良いのでしょうか。 2).上記には関係ないのですが、「<?= $msg ?>」で検索結果の総数を表示したいのですが、「1」としか表示されません…ついでで良いので、ご指摘いただけたらと思います。 <?php $keyword = $_POST['keyword']//検索ワードになります、下記の例では使用していません ?> <?php //データベース接続 $page = $_REQUEST['page']; if ($page == '') { $page = 1; } $page = max($page, 1); // 最終ページを取得する $sql = 'SELECT COUNT(*) AS cnt FROM table1'; $result = mysql_query($sql); $rows = mysql_fetch_assoc($result); $maxPage = ceil($rows['cnt'] / 20); $page = min($page, $maxPage); $start = ($page - 1) * 20; $result = mysql_query('SELECT * FROM table1 LIMIT ' . $start . ',20'); $rowss = mysql_num_rows($sql); //表示するデータを作成 if($rows){ while($row = mysql_fetch_array($result)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["id"]."</td><td>".$row["name"]."</td><td>".$row["mail"]."</td>"; $tempHtml .= "</tr>\n"; } $msg = "".count($rowss).""; }else{ $msg = "sorry"; } //結果保持用メモリを開放する mysql_free_result($result); ?> //下記から、HTML部に表示しています <?php $start_a = ($start + 1); print "".$start_a."件~"; $start_b = ($start + 20); print "".$start_b."件を表示しています(".$page."ページ目/全".$maxPage."ページ)<br>"; if ($page > 1) { print "<a href=\"page.php?page=".($page - 1)."\">前のページへ</a>  "; } else { print "前のページへ"; } if ($page < $maxPage) { print "<a href=\"page.php?page=".($page + 1)."\">次のページへ</a>  "; } else { print "次のページへ"; } ?> <?= $msg ?> 何卒、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 検索結果をgoogleのように数件ずつ表示

    データベース初心者で申し訳ないのですが、質問失礼いたします。 googleのような検索結果ページで、検索結果を3件ずつ表示し、改ページ(?)をさせたいと思っております。 【web表示例】 1ページ目 3件表示/20件中表示 +------+------+---+ | name | anime | age | +------+------+---+ | サザエ | サザエさん | 24 | | マスオ | サザエさん | 29 | | タラオ | サザエさん | 3 | +------+------+---+ 1234567 //ページ数へのリンクですが、現在表示されている「1」にはリンクをさせません ※あらかじめLIMITで1~3件、4~6件を表示させるというページを作っているやり方でなく、  検索結果を自動で1ページ、2ページと振り分けてくれるものと考えています。 現在作成しておりますPHP部を、抽出条件など省いてはおりますが下記に表記させていただきました。 <?php //データベース接続 省略・・・ //検索ワードを取得 $keyword = $_POST['keyword']; $sql = "SELECT * FROM TABLE1 WHERE '%".$keyword."%' ORDER BY age "; $result = executeQuery($sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); if($rows){ while($row = mysql_fetch_array($result)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["name"]."</td><td>".$row["anime"]."</td><td>".$row["age"]."</td>"; $tempHtml .= "</tr>\n"; } $msg = $rows."件のデータがあります。"; }else{ $msg = "データがありません。"; } mysql_free_result($result); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title></title> </head> <body> <?= $msg ?> <table> <?= $tempHtml ?> </table> </body> </html> 他HTMLで検索したあと、上記1ページで検索結果を表示しています。 ○件ずつ表示・・・というのは、難しいと調べている時にありましたが、 もっと理解してからでないととは思ったのですが必要となり自分なりに調べて試したものだけでは解決にならず質問の方させていただきました。 が、やはり初心者には難しいでしょうか?? ちなみに、調べていて「CGIで・・・」というものも多かったのですが、 検索ページがPHP+MySQLで作られているので、同じものでと考えています。 今使用しているものがPHP+MySQLなので、こちらでできればと思っております。 何卒宜しくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう