2013-08-14 5 views
2

У меня возникла проблема с SQL Query ... У меня есть файл, который экспортирует CSV-файл, который работал до тех пор, пока я не добавил ограничение на запрос.PHP MySQL Query

Вот что я имею

<?php 
$today = date("mdY"); 
function exportMysqlToCsv($table,$filename = 'TodaysSubmissions.csv') 
{ 
$csv_terminated = "\n"; 
$csv_separator = ","; 
$csv_enclosed = '"'; 
$csv_escaped = "\\"; 
$sql_query = "SELECT * FROM $table WHERE submitDate = '".$today."'"; 

Я хочу, чтобы экспортировать все записи только с сегодняшнего дня и в моей форме я использую один и тот же формат даты для $ сегодня поэтому она должна соответствовать.

Кроме того, когда я изменить к этому он создает CSV файл именно так, что я хочу

$sql_query = "SELECT * FROM $table WHERE submitDate = 08142013"; 

Так что я делаю неправильно, когда я называю $ сегодня в запросе? Я чувствую, что я все это пробовал.

Edit здесь весь файл

  $today = date("mdY"); 
     function exportMysqlToCsv($table,$filename = 'TodaysSubmissions.csv') 
     { 
      $csv_terminated = "\n"; 
      $csv_separator = ","; 
      $csv_enclosed = '"'; 
      $csv_escaped = "\\"; 
      $sql_query = 'SELECT * FROM $table WHERE submitDate = "'.$today.'"'; 

      // Gets the data from the database 
      $result = mysql_query($sql_query); 
      $fields_cnt = mysql_num_fields($result); 


      $schema_insert = ''; 

      for ($i = 0; $i < $fields_cnt; $i++) 
      { 
       $l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, 
        stripslashes(mysql_field_name($result, $i))) . $csv_enclosed; 
       $schema_insert .= $l; 
       $schema_insert .= $csv_separator; 
      } // end for 

      $out = trim(substr($schema_insert, 0, -1)); 
      $out .= $csv_terminated; 

      // Format the data 
      while ($row = mysql_fetch_array($result)) 
      { 
       $schema_insert = ''; 
       for ($j = 0; $j < $fields_cnt; $j++) 
       { 
        if ($row[$j] == '0' || $row[$j] != '') 
        { 

         if ($csv_enclosed == '') 
         { 
          $schema_insert .= $row[$j]; 
         } else 
         { 
          $schema_insert .= $csv_enclosed . 
          str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $row[$j]) . $csv_enclosed; 
         } 
        } else 
        { 
         $schema_insert .= ''; 
        } 

        if ($j < $fields_cnt - 1) 
        { 
         $schema_insert .= $csv_separator; 
        } 
       } // end for 

       $out .= $schema_insert; 
       $out .= $csv_terminated; 
      } // end while 

      header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
      header("Content-Length: " . strlen($out)); 
      // Output to browser with appropriate mime type, you choose ;) 
      header("Content-type: text/x-csv"); 
      //header("Content-type: text/csv"); 
      //header("Content-type: application/csv"); 
      header("Content-Disposition: attachment; filename=$filename"); 
      echo $out; 
      exit; 
+1

Любая ошибка или результаты просто не найдены? – John

+0

Вы не показали нам, где действительно вызывается запрос, который может иметь значение – StephenTG

+0

, единственное различие между этими двумя - это одинарные кавычки вокруг вашего динамически сгенерированного запроса. –

ответ

4

Если вы хотите иметь $today переменная доступна для всех функций, и объявить его вне функции, вы должны объявить его внутри функции с global:

<?php 
$today = date("mdY"); 

... 

function exportMysqlToCsv($table,$filename = 'TodaysSubmissions.csv') 
{ 
    global $today; 
    ... 
    $sql_query = "SELECT * FROM $table WHERE submitDate = '".$today."'"; 

Рекомендуемая литература

Также вас есть это в «полный» код:

$sql_query = 'SELECT * FROM $table WHERE submitDate = "'.$today.'"'; 

двойные кавычки не будет работать, это точно.

+0

СПАСИБО! ppeterka, я все еще пытаюсь изучить все входы и выходы PHP, я не знал, что о Global – Travis

0

$today не определен в функции. Переместите его в функцию.

function exportMysqlToCsv($table,$filename = 'TodaysSubmissions.csv') 
{ 
    $today = date("mdY"); 
    $csv_terminated = "\n"; 
    $csv_separator = ","; 
    $csv_enclosed = '"'; 
    $csv_escaped = "\\"; 
    $sql_query = "SELECT * FROM $table WHERE submitDate = '{$today}'"; 

Используя двойные кавычки, вы можете просто добавить переменную, не используя конкатенацию.

http://php.net/manual/en/language.variables.scope.php

+0

СПАСИБО! Schleis – Travis