0

高校のフットボール チームのスコアを更新するために、PHP/MySQL CSV アップローダー/アップデーターを作成しました。

Windows 7 の XAMPP でこのスクリプトを実行すると、「LOAD DATA INFILE」クエリのパーミッション エラーが発生しました。PHPMyAdmin 内で自分のアクセス許可を確認したところ、ユーザーはすべてのアクセス許可を持っていたので、そうではありませんでした。

まずその問題を解決する必要があります。PHPMyAdminで直接クエリを実行して、すべてをアップロードすることになりました。ただし、2 つのアップロード クエリを実行しようとすると、スクリプトがタイムアウトしました。

ここで行うプロセスは、ファイルをアップロードし、レコードを新しいテーブル (csv_data) にインポートすることです。次に、2 つの更新クエリを実行して、ゲーム テーブルを csv_data テーブルの新しいデータで更新します。

2 つのクエリの理由は、ホーム/ビジターに関する限り、間違ったチームが間違った列にあることがあるからです。CONCAT() を使用すると、実際に速度が低下することがわかりました。

そのため、最初に「LOAD DATA INFILE」クエリでアクセス許可の問題を修正してから、更新クエリを高速化する方法を見つける必要があります。何か案は?

<?php
require_once('global.php');
if (array_key_exists('submit', $_POST)) {
    if ($_FILES['csv']['error'] > 0){
        echo "Error: " . $_FILES['csv']['error'] . "</br>" . "You have not selected a file or there is another error."; 
    } else {
        $tmp = $_FILES['csv']['tmp_name'];
    }
    if (!$_FILES['csv']['type'] == 'text/csv'){
        echo "Please select a CSV File";
    } else {
        $location = dirname(__FILE__) . '/csv/' . basename($_FILES['csv']['name']);
        move_uploaded_file($tmp, $location);
    }
    $errors = array();
    // Need to get this query to work properly regarding permissions
    $query = $db->prepare("LOAD DATA INFILE ? 
        INTO TABLE csv_data 
        FIELDS TERMINATED BY ',' 
        LINES TERMINATED BY '\n' 
        (game_week, home_team, home_score, visitor_team, visitor_score)");
    if ($query->execute(array($location))) {
        try {
            // Need to figure out how to use LIKE instead of = and do it quickly
            $query_two = $db->prepare("UPDATE game g, csv_data c, team home_team, team visit_team 
                SET g.game_home_score = c.home_score, 
                    g.game_visitor_score = c.visitor_score, 
                    g.game_complete = 'Y' 
                WHERE g.game_week = c.game_week 
                    AND home_team.team_name LIKE CONCAT('%', c.home_team, '%') 
                    AND home_team.team_id  LIKE CONCAT('%', g.game_home_team, '%') 
                    AND visit_team.team_name  LIKE CONCAT('%', c.visitor_team, '%') 
                    AND visit_team.team_id  LIKE CONCAT('%', g.game_visitor_team, '%')");
            if (!$query_two->execute()) {
                $errors[] = 'The first update query failed.';
            }
            $query_three = $db->prepare("UPDATE game g, csv_data c, team home_team, team visit_team 
                SET g.game_home_score = c.visitor_score, 
                    g.game_visitor_score = c.home_score, 
                    g.game_complete = 'Y' 
                WHERE g.game_week = c.game_week 
                    AND home_team.team_name  LIKE CONCAT('%', c.visitor_team, '%') 
                    AND home_team.team_id  LIKE CONCAT('%', g.game_home_team, '%') 
                    AND visit_team.team_name  LIKE CONCAT('%', c.home_team, '%') 
                    AND visit_team.team_id  LIKE CONCAT('%', g.game_visitor_team, '%')");
            if (!$query_three->execute()) {
                $errors[] = 'The second update query failed.';
            }
        } catch(PDOException $e) {
            echo $e->getMessage();
        }
    } else {
        $errors[] = 'CSV Upload Query Failed.';
    }
}
?>
4

0 に答える 0