2011-11-29 4 views
5

以下のような.sqlファイルは、どのようにして入手できますか?PHP経由でMySQLファイルを入手しますか?

CREATE DATABASE IF NOT EXISTS data_base; 
USE data_base; 
CREATE TABLE IF NOT EXISTS the_table( 
    package_name varchar(50) NOT NULL, 
    PRIMARY KEY (`package_name`) 
) 

私は以下を試みましたが、うまくいきませんでした。私はいくつかの研究をしようとしましたが、LOAD DATA INFILEと呼ばれることをする必要があるようですが、わかりません。

mysql_query("source C:/xampp/htdocs/Project1/mysql/source.sql;") or die(mysql_error()); 

PHPを使用して.sqlファイルを入手するにはどうすればよいですか?ありがとう。

答えて

4

mysqli :: multi_query()でもSQLスクリプトを実行することはできません。 SQLスクリプトには、MySQLサーバーのSQLパーサではなく、mysqlクライアントによってのみbuiltin commandsと認識されるコマンドが含まれている可能性があります。

は、間違いなくmysqlクライアントによって前処理されたコマンドです。サーバーはそのコマンドを理解していません。したがって、クエリAPIを使用してサーバー上でSOURCEを実行することはできません。

mysqlクライアントの組み込みコマンドを除外するようにSQLスクリプトの内容を制限できる場合は、mysqli :: multi_query()を使用することができます。しかし、SQLスクリプトで許可されている完全なコマンドセットでは機能しません。

はそれだけで、既存のテーブルにテキストファイルのフィールドをロードし、Running MySQL *.sql files in PHP

は、LOAD DATA INFILEへの私の答えは、テーブルを作成するSQL文を実行しないも参照してください。

2

mysqlコマンドラインステートメントとPHPの関数呼び出しを混在させています。どちらか一方をしてください。

mysql CLI(利用可能な場合)の活用:これは、潜在的なセキュリティリスクです:

// executing mysql cli 
exec("mysql < test.sql"); 

それともmysqli_multi_query()でSQLを実行します。

// running the files contents in bulk 
$sql= file_get_contents('test.sql'); 
mysqli_multi_query($sql); 

注意を。助言されます。

+0

素晴らしい、ありがとう。それはなぜセキュリティ上のリスクですか? – user954912

+1

SQLファイルが悪意のある(偽装されている、ユーザが生成したなど)可能性があります。さらに、複数のクエリでエラー制御が制限されていました。要点は非常に限定された限られたケースで実行されるべきです。 –

関連する問題