少しややこしく聞こえるかもしれませんし、私がしていることはまったく正しくないかもしれませんが、ここまでです。
ユーザーは、SIMS と呼ばれる外部管理システムからエクスポートされた、学校のデータを含む .csv ファイルをアップロードできます。彼らがそのファイルをアップロードしたら、このファイルで提供された情報でデータベースを更新する .sql スクリプトを実行したいと思います。私が行ったことは、ファイルのアップロード ページ (チャームのように機能します) で、以下に示すように、アップロードされたファイルのファイル パスと名前を含むセッション変数を作成することです (ファイル パスは空白になっています)。
$target_path = "xxx";
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path))
{
echo "<p>The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded.</p>" ;
echo "<p><a href='sqltest.php'>Click here</a> to upload your files into the database.</p>" ;
$_SESSION['file'] = $target_path ;
}
以下は、セッション変数を含む PHP 内で操作される .sql ファイルの一部です。この populate スクリプトのほとんどは全体を通して同じ種類のコマンドを使用するため、973 行のコードすべてを表示するのはおそらく意味がありません (もちろん、ページの上部でアクティブな session_start() があります)。
$filename = $_SESSION['file'] ;
mysqli_query($dbc, 'SET foreign_key_checks = 0') ;
$populate =
"CREATE TEMPORARY TABLE IF NOT EXISTS `mldb`.`TempSchool`
(
`CentreNo` INT UNSIGNED NOT NULL,
`School` VARCHAR(255) NULL,
`Street` VARCHAR(255) NULL,
`Town` VARCHAR(255) NULL,
`County` VARCHAR(255) NULL,
`Postcode` VARCHAR(10) NULL,
`Tel` VARCHAR(45) NULL,
`URL` VARCHAR(512) NULL,
`Email` VARCHAR(255) NULL,
`Headteacher` VARCHAR(255) NULL,
`LEA` VARCHAR(45) NULL,
`LEANo` INT UNSIGNED NULL,
`EstablishmentNo` INT UNSIGNED NULL,
`URN` INT UNSIGNED NULL,
`Governance` VARCHAR(45) NULL,
`Phase` VARCHAR(45) NULL,
PRIMARY KEY (`CentreNo`)
)
ENGINE = InnoDB ;
LOAD DATA INFILE '$filename'
IGNORE INTO TABLE `TempSchool`
FIELDS TERMINATED BY ' , '
OPTIONALLY ENCLOSED BY ' \" '
LINES TERMINATED BY ' \r\n '
IGNORE 1 LINES (etc...)
コードの 25 行目 (LOAD DATA INFILE '$filename') でエラーが発生し、次のように表示されます。
Invalid query: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 'LOAD DATA INFILE
'C:/Users/Public/Dropbox/mlwebfiles/Trial/uploads/MarksLive Set' at line 25
おそらく、$_SESSION['file'] 変数に格納されているファイル パスとファイル名を認識しているにもかかわらず、実際には何もしていないという事実と関係があります。この .sql ファイルがファイル名の変数を設定する PHP を介して操作できる方法はありますか? どうもありがとう!