Команда SQL разбита на несколько строк php - PullRequest
0 голосов
/ 05 декабря 2011

Мне нужно разделить эту команду SQL, и теперь у меня проблема с кавычками. Может кто-нибудь, пожалуйста, помогите ?? (Я пытаюсь динамически назначить имя файла для OUTFILE, который должен включать текущую метку времени как часть имени файла). Спасибо.

<?php 

  $sql_query = "SELECT @myCommand := concat("'SELECT UNIX_TIMESTAMP( TIMESTAMP( CURDATE( ) , HalfHourTime ) ), 0, 0, 0, 0 '";
  $sql_query =$sql_query . into OUTFILE 'C:/wamp/www/myApp/services/csv/filename-", 'DATE_FORMAT(now(),"%Y%m%d-%H%i%s")', '.csv' "' ';
  $sql_query =$sql_query . FIELDS TERMINATED BY ','  ';
  $sql_query =$sql_query . LINES TERMINATED BY '\n'';
  $sql_query =$sql_query .FROM timeintervals_halfhours';
  $sql_query =$sql_query . ');";
  $sql_query =$sql_query . "PREPARE stmt FROM @myCommand; ";
  $sql_query =$sql_query . "EXECUTE stmt;";

  define("DATABASE_SERVER", "localhost");
  define("DATABASE_USERNAME", "root");
  define("DATABASE_PASSWORD", "");
  define("DATABASE_NAME", "dataR");

  $con = mysqli_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
  $selected_db = mysql_select_db(DATABASE_NAME, $con);     

  $result = mysql_query($sql_query);

  $temp = mysql_fetch_array($result);
?>

Ответы [ 3 ]

5 голосов
/ 05 декабря 2011

Ничего не разделяйте, пробел - ваш друг ( особенно с 8-символьным отрывом и шагом отступа 4 )

$sql = 'SELECT *
        FROM `table`
        WHERE `table`.`field` = :param';

И в соответствии с рекомендациями использовать подготовленные заявления; переход на PDO .

2 голосов
/ 05 декабря 2011

Вы можете захотеть исследовать с помощью операторов PHP mysqli::prepare, чтобы избежать такого рода манипуляций со строками. Подробнее см. http://www.php.net/manual/en/mysqli.prepare.php.

0 голосов
/ 05 декабря 2011

Вместо выполнения $sql = $sql . "more" вы можете объединить свои строки, используя вместо этого .=, например:

$sql .= 'more';

У вас также есть проблема в вашей строке SQL, где вы делаетечто-то не так с цитатой, что вы хотите с ней сделать?Escape it?

$sql_query = "SELECT @myCommand := concat("'SELECT UNIX_TIMESTAMP( TIMESTAMP( CURDATE( ) , HalfHourTime ) ), 0, 0, 0, 0 '";
                                          ^

Для этого конкретного запроса я бы порекомендовал вам создать свой SQL с heredoc , так как вам не нужно экранировать что-либо с ним

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...