Синтаксическая ошибка Отладка - Неожиданное T_CONSTANT_ENCAPSED_STRING

Попытка снять гистограмму значений котировок в корзине покупок. Этот запрос работает, если я вставляю его непосредственно в mySQL, однако у меня возникают проблемы с PHP-частью вещей.

Сообщение об ошибке:

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in .../.../... Line 26.

Мой код:

echo '

Histogram of Quotes

'; $sql = 'SELECT ROUND(ROUND(Fixes.FixAM/31.1035 * Products.Fineness * Products.Buy * Quotes.Weight, 2), -3) AS bucket, COUNT(*) AS Count, RPAD('', LN(COUNT(ROUND(Fixes.FixAM/31.1035 * Products.Fineness * Products.Buy * Quotes.Weight, 2))), "*") AS bar FROM Quotes, Products, Fixes, Currencies, Metals, ProductTypes WHERE Quotes.ProductId = Products.Id AND Products.MetalId = Metals.Id AND Products.ProductTypeId = ProductTypes.Id AND Fixes.CurrencyId = Currencies.Id AND Fixes.MetalId = Metals.Id AND Currencies.Code = "GBP" GROUP BY bucket'; $stmt = $db->prepare($sql); $stmt->execute(); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

Line 26 is the line which says GROUP BY bucket';

Доказательство того, что SQL Code Works

bucket  COUNT   bar
0       114     *****
1000    37      ****
2000    8       **
3000    2       *
4000    3       *
5000    4       *
8000    1   
9000    1   
10000   1   
21000   1   
1
nl ja de
Вы можете посмотреть в nowdoc или heredoc: php.net/manual/en/…
добавлено автор NullUserException, источник

1 ответы

Вы смешиваете кавычки, не избегая их:

$sql = 'SELECT 
            ROUND(ROUND(Fixes.FixAM/31.1035 * Products.Fineness * Products.Buy * Quotes.Weight, 2), -3)    AS bucket,
            COUNT(*) AS Count,
            RPAD('', LN(COUNT(ROUND(Fixes.FixAM/31.1035 * Products.Fineness * Products.Buy * Quotes.Weight, 2))), "*") AS bar
// Here ---------^^
        FROM   
            Quotes,
            Products,
            Fixes,
            Currencies,
            Metals,
            ProductTypes
        WHERE
            Quotes.ProductId = Products.Id AND
            Products.MetalId = Metals.Id AND
            Products.ProductTypeId = ProductTypes.Id AND
            Fixes.CurrencyId = Currencies.Id AND
            Fixes.MetalId = Metals.Id AND
            Currencies.Code = "GBP"                     
        GROUP BY bucket';

Переключите их в двойные кавычки или удалите их в запросе с помощью обратного слэша.

3
добавлено
AAAAHHHHH !!! Черт! Спасибо, это проделывает мою голову в течение получаса !!! Я думаю, ему нужен свежий набор глаз! Спасибо. Я буду принимать ваш ответ так, как смогу
добавлено автор Gravy, источник
@NullUserException - Да, это так, я не знаю, почему люди беспокоятся об обратных шагах!
добавлено автор Gravy, источник
Для большого куска SQL я бы использовал heredoc и не беспокоился о котировках: php.net/manual/en/…
добавлено автор Wesley Murch, источник
@NullUserException: Это правильно;)
добавлено автор Wesley Murch, источник
Переключение на двойные кавычки приведет к ненужному разбору строки и по-прежнему потребует экранирования (около "GBP" ).
добавлено автор NullUserException, источник
@WesleyMurch Это SS в вашем профиле от Ghostbusters?
добавлено автор NullUserException, источник
@Gravy Backticks и цитаты делают разные вещи. Вы нужны backticks, если ваши имена полей зарезервированы для SQL-слов.
добавлено автор NullUserException, источник
Номер строки в ошибке, вероятно, отбросил вас - это может произойти, когда у вас есть большие строки, охватывающие несколько строк. Кроме того, я согласен, что heredocs будет намного чище.
добавлено автор Mike B, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp