• 締切済み

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); ?>

みんなの回答

  • 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% (2127/6289)
回答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(); メッセージが表示されています。

すると、全ての回答が全文表示されます。

専門家に質問してみよう