1

MySQL で作成したクエリの結果をテーブル形式で電子メールに自動的にエクスポートするスクリプトを作成しています。2通の電子メールを受信するところまで動作しています。1通の電子メールで次のエラーが表示されます: SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL構文にエラーがあります。お使いの MySQL サーバーのバージョンに対応するマニュアルで、1 行目の near '' を使用する正しい構文を確認してください [ SELECT COUNT(*) as count, region, MONTHNAME( date) as monthFROM tempur_stores.stats WHERE date> DATE_ADD(DATE(NOW()), INTERVAL -1 WEEK) AND date< DATE(NOW()) GROUP BY region, MONTH( date] SQL 自体でクエリを実行するたびに期待される結果が得られるため、構文が正しいと確信しています。

もう一方のメールには、コード、 countregionmonthで指定した見出しが含まれています

私が間違っている/何かが欠けている提案はありますか?

PHP

public function action_third_party_searches() 

{
    $stmt = DB::query(Database::SELECT, 'SELECT COUNT(*) as `count`,`region`, MONTHNAME(`date`) as`month` FROM tempur_stores.stats WHERE `date` > DATE_ADD(DATE(NOW()), INTERVAL -1 WEEK) AND `date` < DATE(NOW()) GROUP BY `region`, MONTH(`date`');
    $result = $stmt;
    $sendTo = 'myemail@live.com';
    try {
        $result = $stmt->execute()->as_array();
    } catch (Exception $e) {
        mail('myemail@live.com', 'Tempur 3rd Party Store Locator Searches', $e->getMessage());
    }

    $subject = 'Third Party Store Locator Searches - '.date("Y-m-d", strtotime("-1 week")).' - '.date("Y-m-d");
    if (count($result) > 0) {
        $toEmail = array('
            <html>
            <head>
            <title>Third Party Store Locator Searches</title>
            </head>
            <body>
            <table>
                <tr>
                    <td>Count</td>
                    <td>Region</td>
                    <td>Month</td>
                </tr>
        ');
        foreach ($result as $row) {
            $toEmail[] = '
                <tr>
                    <td>'.$row['count'].'</td>
                    <td>'.$row['region'].'</td>
                    <td>'.$row['month'].'</td>
                </tr>
            ';
        }
        $toEmail[] = '
                </table>
                </body>
                </html>';
    } else {
        $toEmail = array('No searches were taken last week!');
    }

    $headers = "Content-type: text/html; charset=utf-8\n".
    "X-Mailer: PHP/".phpversion()."\n".
    "MIME-Version: 1.0\n".
    "From: T UK <no-reply@me.com>\n".
    "Mailed-by: T UK <no-reply@me.com>\n".
    "Reply-To: T UK <no-reply@me.com>\n".
    "Return-Path: T UK <no-reply@me.com>\n";

    mail($sendTo, $subject, implode('', $toEmail), $headers);
   //   mail('myemail@live.com', $subject, implode('', $toEmail), $headers);

}
4

1 に答える 1

9

クエリに閉じ括弧がありません:

$stmt = DB::query(Database::SELECT, 'SELECT COUNT(*) as `count`,`region`, MONTHNAME(`date`) as`month`
                                     FROM tempur_stores.stats
                                     WHERE `date` > DATE_ADD(DATE(NOW()), INTERVAL -1 WEEK)
                                     AND `date` < DATE(NOW())
                                     GROUP BY `region`, MONTH(`date`');
                                                        ----------  ^ right there
于 2013-09-27T13:15:54.060 に答える