2012-03-29 3 views
1

Я использую 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 - $ Редакция: 304625 $)Оператор mysql работает на моем рабочем столе, но не работает на моем веб-хостинге

У меня есть инструкция 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) 

ответ

1

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

Изменение:

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

To:

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

Почему этот вопрос ?

Ваш тестовый сервер и ваш производственный сервер, вероятно, имеют различные настройки для IGNORE_SPACE mode... which permits a space between the function call (FIELD), and the parameter list when enabled.

Permit spaces between a function name and the “(” character. This causes built-in function names to be treated as reserved words. As a result, identifiers that are the same as function names must be quoted as described in Section 8.2, “Schema Object Names”. For example, because there is a COUNT() function, the use of count as a table name in the following statement causes an error:

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) 

The IGNORE_SPACE SQL mode applies to built-in functions, not to user-defined functions or stored functions. It is always permissible to have spaces after a UDF or stored function name, regardless of whether IGNORE_SPACE is enabled.

+0

WOW! работает, не знал о режиме IGNORE_SPACE (я уверен, что большинство людей этого не делают) – ebohatch

+0

@ user1301847 Рад, что сработало! Если это ответили на ваш вопрос, [отметьте его как принятый ответ] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). –

+0

Я забыл сказать спасибо. – ebohatch

0

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

+1

Это изменило бы результаты его 'ПОРЯДКА BY' ... ОП использует' FIELD' код с жёстким порядок 'a.id'. –

+0

NAW, который не использует упорядоченный список, который я создаю, просто сортирует по ключу (a.id) – ebohatch

Смежные вопросы