MySQL4.0.27で、SQLを外部ファイルから読み込む方法はないでしょうか?


↓MySQL4.1以降ならこれで出来るらしいのですが↓

//外部からhoge.sqlを読み込む

if (!($fno = fopen("hoge.sql", 'r'))) {
die;
}

while (!feof($fno)) {
$sql = fread($fno , filesize("hoge.sql"));
}

fclose($fno);

回答の条件
  • 1人2回まで
  • 登録:2007/07/29 15:40:44
  • 終了:2007/07/29 21:31:33

ベストアンサー

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912007/07/29 18:03:12

ポイント100pt

下記のコメントを元に回答しますが、

ご自身で提示されたように SQL として ファイルを読み込めば

実現できます。

もし、include を使用したければ、

sql.php

<?php
   $mySql = 'SELECT * from table';
?>

のようにしておき、include でこのファイルを読み込んで、

読み込む側で $mySql を使用すれば出来ますが、最初に提示されたように

sql ファイルとして定義しておいて、読み込む方が汎用性があるように

思います。


なお、関数の中で上記を参照するには

global $mySql;

の宣言が必要です。

id:petem

>ご自身で提示されたように SQL として ファイルを読み込めば実現できます。


すみません。書き忘れました。

上記を実行すると

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

のエラーが出ます。

このエラーはmysqlのバージョンが古いせいだとサイトに書いてありましたので、別の方法を模索中です。

2007/07/29 18:50:47
  • id:Mook
    動作環境が明示されていませんが、提示された読み込み処理は、PHP か何かのものでしょうか。

    だとしたら、MySQLのバージョンに関わらず、PHPの機能として ファイルを読み込み、それを使用して SQL を発行することは可能だと思いますが、なにか処理を行ううえで、問題となっている出のでしょうか。

    不具合があれば、それを明示したされたほうが、回答しやすいのですが。

  • id:petem
    ご指摘ありがとうございます。

    PHP 4.4.7
    を使用しています。

    ご指摘の通り、
    include "head.html";
    などは読み込まれ、html文として処理されます。

    しかし、
    include "hoge.sql";
    は内容がテキストとして、sql文がそのまま本文中に記載されてしまっています。

    これを解決するための方法を探しているところです。
  • id:Mook
    エラーが出たのはやり方の問題ではなく、読み込んだファイルの中身によるものかと思います。

    まず確認ですが、PHP 内でMySQL からデータを取り出すことは出来るでしょうか。
    もしできるのなら、そのファイルの中身はどのようになっているのでしょうか。

    差し支えない範囲で、SQL の方を提示していただければ、内容の確認は出来るかと思います。
  • id:petem
    >PHP 内でMySQL からデータを取り出すことは出来るでしょうか。
    可能です。
    外部sqlを読み込んだときのみ不具合が出ます。

    以下にsql全文を記述します。
    php内では、このsql文呼び出しの直前にデータベース接続をしています。
    //データベース接続
    $conn = mysql_connect('localhost','xxxxxxx','xxxxxxxx') or die("接続エラー");
    mysql_select_db('xxxxxxx') or die("接続エラー");

    ここから外部SQL↓

    //hoge.sql
    $p = intval(@$_GET["p"] );
    if($p < 1){
    $p = 1;
    }

    $prev = $p - 1;
    if($prev < 1){
    $prev = 1;
    }

    $next = $p + 1;
    $lim = 10;
    $st = ($p - 1) * $lim;
    $st1 = $st + 1;
    $st10 = $st + 10;
  • id:Mook
    おおよそ状況がわかった気がします。
    hoge.sql は sql ではなく PHP コードですね。

    であれば、回答したようにこのファイル内の先頭と最後を
    <?PHP
    ?>
    で囲む必要があります。

    また、ファイルも sql ではなく php という拡張子にした方が良いでしょう。

    sql ファイルとは SQL の文法で書かれ、コマンドプロンプトでmysqlコマンドの引数として単独で実行できるものを指します。

    mysql_query でエラーが出ているのであれば、そこで指定している SQL 文に問題があるはずですから、それを提示されてはどうかと思います。
  • id:petem
    >hoge.sql は sql ではなく PHP コードですね。

    (・□・)なるほど。。。
    私が共通語で会話できていなかったのですね。


    ありがとうございます。
    hoge.phpのファイル内を
    <?PHP
    ?>
    で囲んだら解決しました。


    お手数おかけしました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません