Использование PHP и mysql для создания файла CSV

Я пытаюсь создать файл csv через php и mysql. При вводе оператора mysql в mysql Workbench он генерирует желаемые результаты. Однако, когда я копирую тот же оператор и вставляю его в приведенный ниже код, я получаю CSV без каких-либо результатов. Возможно, это связано с тем, что я создаю 2 временные таблицы, а затем использую их в операторе JOIN?

<?php

//Our MySQL connection details.
$host = 'xxx.xxx.xxx';
$user = 'xxxx';
$password = 'xxxx';
$database = 'xxxx';

//Connect to MySQL using PDO.
$pdo = new PDO("mysql:host=$host;dbname=$database", $user, $password);

//Create our SQL query.
$sql = "create temporary table pt_pickups SELECT 
    parts_processed.reason AS 'PO',
    CONCAT('PU-',
            parts_processed.confirmation_number) AS 'INVOICE',
    elite_routes.source AS 'SOURCE',
    elite_routes.source_udid AS 'SOURCE UDID',
    parts_processed.customer_name AS 'DESTINATION',
    parts_processed.customer_number AS 'DESTINATION UDID',
    namefile.address AS 'DESTINATION_ADDRESS',
    namefile.city AS 'DESTINATION_CITY',
    namefile.state AS 'DESTINATION_STATE',
    namefile.zip AS 'DESTINATION_ZIP',
    elite_routes.source AS 'ORDER BY',
    parts_processed.route AS 'ZONE',
    parts_processed.part_number AS 'PART NUMBER',
    parts_processed.description AS 'PART DESCRIPTION',
    parts_processed.ship_to,
    parts_processed.ship_to_address,
    parts_processed.ship_to_city,
    parts_processed.ship_to_state,
    parts_processed.ship_to_zip
FROM
    parts_processed,
    namefile,
    elite_routes,
    data
WHERE
    parts_processed.customer_number = namefile.customernumber
        AND parts_processed.invoice = data.InvoiceNumber
        and elite_routes.route = parts_processed.route
        AND parts_processed.approved = 'APPROVED'
        AND date(parts_processed.date_of_processing) = date(now())
        and (parts_processed.reason LIKE '%CORE%'
        OR parts_processed.reason LIKE '%DAMAGE%'
        OR parts_processed.reason LIKE'%WARRANTY%')
        AND data.PartDescription NOT IN ('CORE RETURN' , 'CLAIM')
        AND data.PartDescription NOT LIKE ('%turbo%')
        AND data.PartDescription NOT LIKE ('%link%')
        AND data.PartDescription NOT LIKE ('%NAVI%')
        AND data.PartDescription NOT LIKE ('%BUMPER%')
        AND data.PartDescription NOT LIKE ('%LEG%')
        AND data.PartDescription NOT LIKE ('%WARRANTY REPLACEMENT PART%')
        AND data.PartDescription NOT LIKE ('%LAMP%')
        AND data.PartDescription NOT LIKE ('%STRUT%')
        AND data.PartDescription NOT LIKE ('%BODY%')
        AND data.PartDescription NOT LIKE ('%PRESSURE%')
        AND data.PartDescription NOT LIKE ('%TUBE%')
        AND data.PartDescription NOT LIKE ('%wheel%')
        AND data.PartDescription NOT LIKE ('%converter%')
        AND ((data.Source IN (9 , 409,
        900,
        901,
        902,
        903,
        904,
        818,
        132,
        232,
        331))
        OR (data.mfg IN ('VW' , 'BW',
        'HA',
        'HV',
        'IS',
        'KM',
        'TL',
        'MD',
        'MB',
        'MI',
        'DA',
        'SA',
        'SU',
        'ZC',
        'TO')
        AND (data.IndCost > 600.00 OR data.indcost < - 600.00)
        AND data.CORE <> 0));
create temporary table reg_pickups SELECT 
    parts_processed.reason AS 'PO',
    CONCAT('PU-',
            parts_processed.confirmation_number) AS 'INVOICE',
    elite_routes.source AS 'SOURCE',
    elite_routes.source_udid AS 'SOURCE UDID',
    parts_processed.customer_name AS 'DESTINATION',
    parts_processed.customer_number AS 'DESTINATION UDID',
    namefile.address AS 'DESTINATION_ADDRESS',
    namefile.city AS 'DESTINATION_CITY',
    namefile.state AS 'DESTINATION_STATE',
    namefile.zip AS 'DESTINATION_ZIP',
    elite_routes.source AS 'ORDER BY',
    parts_processed.route AS 'ZONE',
    parts_processed.part_number AS 'PART NUMBER',
    parts_processed.description AS 'PART DESCRIPTION',
    parts_processed.ship_to,
    parts_processed.ship_to_address,
    parts_processed.ship_to_city,
    parts_processed.ship_to_state,
    parts_processed.ship_to_zip
FROM
    parts_processed,
    namefile,
    elite_routes
WHERE
    parts_processed.customer_number = namefile.customernumber
        and elite_routes.route = parts_processed.route
        AND parts_processed.approved = 'APPROVED'
        AND date(parts_processed.date_of_processing) = date(now())
        and (parts_processed.reason LIKE '%CORE%'
        OR parts_processed.reason LIKE '%DAMAGE%'
        OR parts_processed.reason LIKE'%WARRANTY%');
SELECT 
    *
FROM
    reg_pickups
        LEFT JOIN
    pt_pickups ON reg_pickups.invoice = pt_pickups.invoice
WHERE
    pt_pickups.invoice IS NULL;
";

//Prepare our SQL query.
$statement = $pdo->prepare($sql);

//Executre our SQL query.
$statement->execute();

//Fetch all of the rows from our MySQL table.
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);

//Get the column names.
$columnNames = array();
if (!empty($rows)){
    //We only need to loop through the first row of our result
    //in order to collate the column names.
    $firstRow = $rows[0];
    foreach($firstRow as $colName => $val){
        $columnNames[] = $colName;
    }
}

date_default_timezone_set('America/New_York');

//Setup the filename that our CSV will have when it is downloaded.
$fileName = "U:\ElitePickUps\Pickups-".date('m-d-y').".csv";

//Set the Content-Type and Content-Disposition headers to force the download.
header('Content-Type: application/excel');
header('Content-Disposition: attachment; filename = "' . $fileName . '"');

//Open up a file pointer
$fp = fopen($fileName, 'w');

//Start off by writing the column names to the file.
fputcsv($fp, $columnNames);

//Then, loop through the rows and write them to the CSV file.
foreach ($rows as $row) {
    fputcsv($fp, $row);
}

//Close the file pointer.
fclose($fp);

Что вы сделали, чтобы отладить эту проблему? Возвращает ли запрос к базе данных какие-либо результаты? Это ваш полный код, потому что вы нигде не возвращаете файл.

miken32 18.03.2019 20:26

несколько запросов в одной строке не будут (на самом деле) подходящими в качестве prepared statement, и я не верю, что есть вариант multi-query для PDO. Возможно, вы могли бы выполнить основную часть работы в stored procedure?

Professor Abronsius 18.03.2019 20:30

RamRaider — я создал хранимую процедуру, и теперь в CSV-файле есть заголовки столбцов, но это все.

DarrenMcGettigan 18.03.2019 21:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
60
0

Другие вопросы по теме