MySQL заявление работает на моем рабочем столе, но не на моем веб-хосте - PullRequest
1 голос
/ 30 марта 2012

Я использую XAMPP на своем рабочем столе (Apache / 2.2.17 (Win32) mod_ssl / 2.2.17 OpenSSL / 0.9.8o PHP / 5.3.4 mod_perl / 2.0.4 Perl / v5.10.1 Версия клиента MySQL: mysqlnd 5.0.7-dev - 091210 - $ Revision: 304625 $)

У меня есть оператор MYSQL SELECT, который отлично работает в моем настольном приложении, даже запускал его в phpMyadmin и работает правильно.

Когда я двигаюсьмое заявление до моего веб-хостинга заявление терпит неудачу.Мой веб-хостинг работает под управлением Apache с клиентской версией MySQL: 5.0.92. Когда я использовал phpMyadmin на своем веб-хосте, он выдает мне ошибку:

FUNCTION nwilin5_eib_jtest.FIELD does not exist

Вот утверждение:

SELECT a.*, p.name as parent, p.id as parentid, c.name as cat
    , c.id as catid,u.username as user, f.itemid as featured
    , f.payment_date as FeaturedPayDate, f.limit_date as FeaturedExpDate  
FROM jos_classifiedsredux_ads as a  
LEFT JOIN jos_users as u 
    ON a.userid = u.id  
LEFT JOIN jos_classifiedsredux_pay4featuredad as f 
    ON a.id = f.itemid  
INNER JOIN jos_classifiedsredux_categories as c 
    ON a.category = c.id  
LEFT JOIN jos_classifiedsredux_categories as p 
    ON c.parent = p.id  
WHERE a.published = 1 
ORDER BY FIELD (a.id, 137, 226, 134, 135, 220, 240, 233, 219, 146, 138, 136, 133)

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Вам необходимо удалить пробел между FIELD и ( в вашем ORDER BY ...

Изменение:

ORDER BY FIELD (a.id, 137, 226, 134, 135, 220...

Кому:

ORDER BY FIELD(a.id, 137, 226, 134, 135, 220...

Почему это важно?

Ваш тестовый сервер и рабочий сервер, скорее всего, имеют разные настройки для режима IGNORE_SPACE ..., который разрешает пробел между вызовом функции (FIELD) и списком параметров, когда он включен.

Разрешить пробелы между именем функции и символом «(». Это заставляет имена встроенных функций обрабатываться как зарезервированные слова. Как результат, идентификаторы, которые совпадают с именами функций, должны быть заключены в кавычки как описано в разделе 8.2 «Имена объектов схемы». Например, поскольку есть функция COUNT (), использование count в качестве имени таблицы в следующем утверждении вызывает ошибку:

mysql> CREATE TABLE count (i INT); 
ERROR 1064 (42000): You have an error in your SQL syntax 
The table name should be quoted:

mysql> CREATE TABLE `count` (i INT); 
Query OK, 0 rows affected (0.00 sec) 

Режим SQL IGNORE_SPACE применяется к встроенным функциям, а не к пользовательские функции или хранимые функции. Это всегда допустимо иметь пробелы после UDF или имени хранимой функции, независимо от включен ли IGNORE_SPACE.

0 голосов
/ 30 марта 2012

Быстрое исправление - измените ORDER BY на ORDER BY a.id, ..., и оно должно работать.

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