Внедрение SQL в контроллер в codeignitor - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь ввести SQL с помощью метода DATE_FORMAT, и это дает мне ошибку разбора. Но запрос отлично работает в phpmyadmin. Ниже вы можете найти мой код, который является моим контроллером

public function index() {
  $sql = "SELECT DATE_FORMAT('added_date', "%M") AS Month, SUM(total) FROM tbl_order GROUP BY DATE_FORMAT('added_date', "%M")";
  $query = $this->db->query($sql);
  $orderData= $query->result_array();
  $data["orderData"] = $orderData;
  var_dump($data);die;
  $this->load->view('admindashboard/index.php',$data);
}

Я также приложил сообщение об ошибке enter image description here

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

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

$sql = 'SELECT DATE_FORMAT("added_date", "%M") AS Month, 
SUM(total) FROM tbl_order 
GROUP BY DATE_FORMAT("added_date", "%M")';
0 голосов
/ 30 октября 2018

Если added_date - это столбец, вы должны внимательно следить за используемыми кавычками. В MySQL столбцы разделяются обратными метками, но это необходимо, только если они конфликтуют с какими-либо зарезервированными ключевыми словами .

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

 $query = $this->db->query("SELECT DATE_FORMAT(added_date, \"%M\") AS Month, SUM(total) FROM tbl_order GROUP BY Month");

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

Другое исправление заключается в использовании двух разных типов цитат. Режим MySQL по умолчанию допускает двойные или одинарные кавычки для строковых значений:

 $query = $this->db->query('SELECT DATE_FORMAT(added_date, "%M") AS Month, SUM(total) FROM tbl_order GROUP BY Month');

На практике обычно лучше использовать строки в одинарных кавычках для запросов по единственной причине предотвращения случайного внедрения SQL: $ переменные типа не интерполируются в режиме одинарных кавычек.

0 голосов
/ 30 октября 2018

Я думаю, вы можете попытаться использовать '%M' вместо "%M", потому что это разделит строку на ".

$sql = "SELECT DATE_FORMAT(added_date, '%M') AS Month, 
SUM(total) 
FROM tbl_order 
GROUP BY DATE_FORMAT(added_date, '%M')";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...