• 締切済み

PHP関数化での不具合?

お世話になっております。 PHP歴(趣味レベルで)1年のdwtと申します。 PHPでどうしても解決できない不具合があり 自分では解決できそうになかったので質問させて 頂きました。以下のその症状です。 ・プログラム MySQLと連動したBBS →改造・参考元http://php.s3.to/のP-BBS DB版 ・形式 自作のBlogにインクルードさせて動作させる HTMLタグを修正すれば単体起動も可能 ・プログラムの流れ 変数宣言 ↓ 各処理をfunctionで小分け その際必要な変数だけglobalにて取得 ↓ case文で処理ごとに必要なfunctionを拾い上げ ・症状 単体起動だと正常に動作するがインクルードを行うと 「You have an error in your SQL syntax near 'bbs,5' at line 1」 となる。 ・原因思えるポイント スクリプトをfunctionで小分けするという事は これ以外やったことないのでそのへんの不具合? ->但しglobalで必要なものを呼んでいる 処理内のインクルードでfunctionというやり方がおかしい ->blog側では処理の真っ最中なので宣言しなおしっていうのはやはり変……だけど妥当な修正が思いつかず(^^; SQL宣言がおかしい ->インクルードスクリプト事にオープン/クローズを行っているので接続は問題ないハズ。構文エラーも単体起動可能なので平気かと思われます。 以上です。 ここをチェックしてみれば?的なご意見があればお願い致します。

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

処理内のインクルードでfunctionというやり方がおかしいのでは? インクルードするファイルに直接実行PHPを書込み、functionで囲わなければ global にしなくても動作すると思いますけども。。 (インクルードするのならばDBのオープンクローズしなくてもよいかと。DBが開いているところでインクルードさせればそのままSQLを実行すれば問題なし。) もしくはDBのオープンクローズに問題ありとか?

dwt
質問者

お礼

やはりそこが怪しいですよね(^^;>処理内関数宣言 そうですね。そこを書き換え再度やってみようと 思います。 それでだめでも原因の特定につながりますからね(^^; 回答ありがとうございます!

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

関連するQ&A

  • PHP 設定ファイルとユーザ定義関数

    ある機能を満たすためのライブラリ(lib.php)を作成しました。 このlib.phpはユーザ定義関数の寄せ集めです。 それぞれのユーザ定義関数では、設定ファイル(config.php)に記述されている共通変数を利用します。 このconfig.phpなのですが、ユーザ定義関数ごとにincludeする以外の方法はあるでしょうか? lib.php function one() { $hensu1... $hensu2... ...処理; } function two() { $hensu1... ...処理; } .... config.php $hensu1 = 1; $hensu2 = 2; ... という構成です。 function one,function twoでconfig.phpの変数を利用したいのですが、lib.phpの先頭でinclude "config.php"をしてもfunctionの中では変数のスコープが有効にはならず、 lib.php function one() { include "config.php"; ...処理; } function two() { include "config.php"; ...処理; } としています。 PHP5を使用しています。 function one() { global $hensu1... } としたらよいのでしょうか? どなたかアドバイスいただけますと幸いです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • インクルードによる不具合

    PHP初心者です。 以下2つのファイルを使って簡単な接続テストを行ってから徐々に 目的のものを作り上げていこうとしたのですが、どうにもうまく動作しません。(2つは同一ディレクトリにある) ・「mysql.php」:DB接続とSQLの発行 ・「test.php」:ブラウザ出力(本体:mysql.php呼び出し元) 実行すると「*** DB/SQLテスト ***」のみブラウザに出力されるため、試しに「mysql.php」で行うDB接続とSQL発行をすべてtest.phpに直接書いてインクルードせず単体で実行したところ、目的の結果が表示されました。 なので問題はインクルード文にあるのだと思うのですが検討がつきません。 どなたかお力をお貸し下さい。 ちなみに以下のコードは参考にしたテキストの例題をもとに見やすくするため余分な処理やエラー処理などを省いたものです。 ■mysql.php <?php class MySQL{ var $m_con; var $m_rows = 0; function MySQL(){ $this->m_con = mysql_connect("ホスト名", "ユーザ名", "パスワード"); mysql_select_db("データベース名", $this->m_con); } function query($sql){ $this->m_rows = mysql_query($sql, $this->m_con); return $this->m_rows; } } ?> ■test.php <html> <head> <meta http-equive="Content-type" content="text/html; charset=utf-8"> <title>SQLtest</title> </head> <body> *** DB/SQLテスト ***<br> <?php include("mysql.php"); $mysql = new MySQL; $sql = "SELECT * FROM staff"; $mysql->query($sql); while($row = mysql_fetch_array($this->m_rows)){ echo $row["id"]; echo $row["name"]; echo "<br>"; } ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHP5で自動的にinclude_once

    概要:Apache 2 + PHP5 において、すべてのスクリプトに自動的に、include_onceのような効果を得る方法について教えてください。 詳細: 昔開発していたPHPスクリプトにおいて スクリプト中に include_once や require_once を書かずに スクリプトが呼び出される度に、スクリプトの冒頭で include_once したかのように、パスの設定などを行う初期化スクリプトを include して実行させる方法を取っていたはずなのですが、そのやり方を忘れてしまいました。 初期化スクリプト中では define などをして、スクリプトが依存するライブラリやデータのパスの設定を変数に対して行っており、処理コストの低い簡単な処理も入ります。 すべてのスクリプトにおいて、その変数が示すパスを使ってデータの読み書きを行っています。 その手法は、Apache2 が多目的に使われる場合には、オーバーヘッドあるいは弊害があるだろうというようなものだったと思います。(当時そう思った事をなんとなく覚えている次第です) Apache2がリクエストを受け取る度に、実行されるため、そのスクリプトと関係のない php スクリプトが呼ばれた際にも自動的に取りこまれてパスなどが変数に設定されます。 その Apache 2 は、限定的な用途で利用され、サーバーマシンごと特定用途で利用することを前提としていたため、そういった手法をとったのだと思いますが、詳細は不明です。 おそらく、apache2.conf (あるいは httpd.conf) か php.ini に設定していたと思うんですが、当時の設定ファイルを読み解いても、それらしい記述が見当たらず、ここ数日悩んでおります。 一応、実行環境について書きますと 当時の実行環境は、Windows 2000 + Apache 2 + PHP 3~5(?) + PEAR + MySQL 3(?) で、現在は ubuntu + Apache 2 + PHP5 + PEAR + MySQL 5 で動かそうとしております。 このような内容なのですが、お心当たりのある方は、ご教示お願い致します。

    • ベストアンサー
    • PHP
  • Ajax以外で、JavaScriptからPHPへ渡

    Ajax通信以外で、JavaScriptからPHPへ変数(配列)を渡したいのですが、 可能でしょうか? 下記のような状態の時、js変数dataを、Ajax通信を利用せずにPHP変数として取得したいのですが、どうすればよいでしょうか? JavaScript関数の中で、PHPフォームの送信ボタンをクリックさせる(ような)ことは出来ないのでしょうか? <button type="button" onclick="testsubmit();">送信</button> <script> function testsubmit(){  js処理;  var data = ★★; } </script> ■最終的にやりたいこと ・ボタンをクリックしたら、js処理で取得したjs変数(配列)を、Ajax通信を利用せずに、PHP変数として受け取りたい ・それを出来れば1クリックで処理したい

  • 関数の組み込み。

    PHPでの関数の組み込みの質問です。 自作の関数を集めたPHPファイル"common_function.php"を製作し、 それぞれの処理の頭でこの関数ファイルをinclude_onceを使って 読み込んでいるという形式で処理を行っています。 include_once("../common/common_function.php"); この処理を行わずにこの関数ファイルををデフォルトで読み込む ようにPHPの設定に組みこむ事はできないのでしょうか? よい方法があれば宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHPにおいて変数の初期化

    PHPで変数を初期化する際の初期化の方法について質問です。 私はPHPで変数を初期化するさい、視認しやすい様にsettype関数を用いることが おおいです。 単純に $hoge = array(); $foo = ""; $hoo = 1; とするより settype($hoge,"array"); とした方が、明確に 「ああ。この変数はこの行数で初めてでてきたんだな」 という具合に判断できるとおもっているからです。 例えばJSだと var hoge; という具合に、変数そのものの宣言を先んじておこなえますよね。 このように明確な変数宣言がわかりやすいとおもうのですが・・・・。 みなさまがたはPHPではどのように変数を初期化しますか? ご意見おきかせください。

    • 締切済み
    • PHP
  • php と SQL 

    PHP・SQLどちらも初心者です。 これから勉強していこうと思っていますが、どこから手をつけていいかわかりません。 私のやりたいことは下記の表を作り、追加ボタンを押すと 追加画面に移りABCDの数値を入れ、登録すると表に一行足される。 修正ボタンを押すとABCDを個別に修正できる。ログも取れたりすとうれしい・・・ 普段の表処理(マクロ処理等も)をWEB上でやりたいのですが、 PHPかSQLだけで出来るんでしょうか?それともPHPとSQL両方必要ですか? 初歩的質問ですみません。 ――――――――――――――――― (1)| A | B | C | D | ――――――――――――――――― (2)| A | B | C | D | ――――――――――――――――― (3)| A | B | C | D | ―――――――――――――――――           ―――――――――――           | 追加 | 修正 |           ―――――――――――           

    • 締切済み
    • PHP
  • phpでの局所変数

    phpで、perlでいうlocalやmyのような宣言はできないのでしょうか? function a() {  if(1){   $a=2;   print "$a<br>";  }  print "$a<br>"; } としても2が2つ表示されてしまいます。 ある関数内で場所を問わず宣言したグローバル変数でない変数のスコープは、宣言場所がどこであれ、「関数内」となるのでしょうか?

    • ベストアンサー
    • PHP
  • PHPでは、あんま大きなプログラムは作れないの?

    PHPでは、あんま大きなプログラムは作れないの? だって、変数の宣言が必要ないから。 変数の宣言が必要ない、ってことは、 おかしな変数があっても、コンパイラーが 事前にチェックできないってことだし。 つまりそれって、デバッグが難しくなるってことでしょう? だから、 「デバッグがめんどくなってきたな、、、」 と感じたら、それは、そろそろJavaとかに 移行しろ、っていう、神からのメッセージでしょ? 変数を使うにあたって、あらかじめ、 宣言が必要な言語であれば、 宣言の無い変数が登場した段階でエラーではじくし、 デバッグも容易になるよね。 つまりそれって、プログラムが大規模になってきたら、 そういう厳密系な言語にシフトしたほうが ストレスがたまらなくっていいってことでしょう?

    • ベストアンサー
    • PHP
  • すっきりしたロジックを・・

    PHP5.0使用です。 画面からデータを登録(修正)し、DBに書き込むプログラムを作っています。 プログラムは登録(修正)画面→確認画面→DB書き込みの3本に分けて、それぞれセッション変数(またはPOST変数)で情報を渡しています。 3本のスクリプトの最初で、セッション変数→普通の変数へ移す処理を行っているのですが($fld001=$_SESSION('fld001')のように)、変数の数が多いため、いかにも冗長です。 functionでもクラスでもいいのですが、各スクリプトで使い回しが出来るような、すっきりしたいい方法はないでしょうか?

    • ベストアンサー
    • PHP