За последние 24 часа нас посетили 19207 программистов и 1643 робота. Сейчас ищут 890 программистов ...

Помогите пожалуйста найти syntax error

Тема в разделе "PHP и базы данных", создана пользователем w3r3wolfphp, 20 фев 2015.

  1. w3r3wolfphp

    w3r3wolfphp Новичок

    С нами с:
    20 фев 2015
    Сообщения:
    12
    Симпатии:
    0
    Добрый день!

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

    В запросе к базе данных:

    $query = "(SELECT good_id, name, img, anons, price, hits, new, sale
    FROM goods
    WHERE goods_brandid = $category AND visible='1')
    UNION
    (SELECT good_id, name, img, anons, price, hits, new, sale
    FROM goods
    WHERE goods_brandid IN
    (
    SELECT brand_id FROM brands WHERE parent_id = $category
    ) AND visible='1') ORDER BY $order_db LIMIT $start_pos $perpage";

    не нравится ему последняя строчка "ORDER BY $order_db", выдает ошибку:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0 9' at line 10
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Запятую пропустили "LIMIT $start_pos, $perpage"
     
  3. w3r3wolfphp

    w3r3wolfphp Новичок

    С нами с:
    20 фев 2015
    Сообщения:
    12
    Симпатии:
    0
    Кстати да, Спасибо, но дело не в этом...

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 9' at line 10

    Есть какие-нибудь соображения, я не нарушил правила сочетания ORDER BY и LIMIT..?
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    блин. ну если ты исправил ошибку с запятой, может поделишся новым сообщением? или блин уже сам начнешь читать - тоже нехуевый вариант. хотя конечно скучный.
     
  5. w3r3wolfphp

    w3r3wolfphp Новичок

    С нами с:
    20 фев 2015
    Сообщения:
    12
    Симпатии:
    0
    Я же написал новое сообщение после этого, в ерроре добавилась запятая и все..

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 9' at line 10
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    сорри тогда, вечер-усталость-невнимательность.
    ну весь запрос с уже подставленными переменными было бы интеесно увидеть, может там пустая строка всралась.
    всегда смотри полный текст запроса если косяк возник. отлаживайся!
     
  7. w3r3wolfphp

    w3r3wolfphp Новичок

    С нами с:
    20 фев 2015
    Сообщения:
    12
    Симпатии:
    0
    Если в целом то выглядит это так:

    function products($category, $order_db, $start_pos, $perpage){
    $query = "(SELECT good_id, name, img, anons, price, hits, new, sale
    FROM goods
    WHERE goods_brandid = $category AND visible='1')
    UNION
    (SELECT good_id, name, img, anons, price, hits, new, sale
    FROM goods
    WHERE goods_brandid IN
    (
    SELECT brand_id FROM brands WHERE parent_id = $category
    ) AND visible='1') ORDER BY $order_db LIMIT $start_pos, $perpage";
    $res = mysql_query($query) or die(mysql_error());

    $products = array();
    while($row = mysql_fetch_assoc($res)){
    $products[] = $row;

    }

    return $products;

    }


    и в контроллере создаю массив:

    $order_p = array(
    'pricea' => array('от дешевых к дорогим', 'price ASC'),
    'priced' => array('от дорогих к дешевым', 'price DESC'),
    'datea' => array('по дате добавления - к последним', 'date ASC'),
    'dated' => array('по дате добавления - с последних', 'date DESC'),
    'namea' => array('от А-Я', 'name ASC'),
    'named' => array('от Я-А', 'name DESC'),
    );
    $order_get = clear($_GET['order']); // получаем возможный параметр сортировки
    if(array_key_exists($order_get, $order_p)){
    $order = $order_p[$order_get][0];
    $order_db = $order_p[$order_get][1];
    }else{
    // по умолчанию сортировка по первому элементу массива order_p
    $order = $order_p['name'][0];
    $order_db = $order_p['name'][1];
    }

    А что вообще это за ошибка..? Не может быть дело в типе таблицы? У меня MyISAM..
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    друг, ты не понял меня. смотри текст запроса — ту строку, которую ты подставляешь в mysql_query()
    нефиг не надо показывать нам свой скрипт.
    Код (Text):
    1.  or die(mysql_error());
    замени на
    Код (Text):
    1.  or die($query . mysql_error());
    понял, нет?

    Добавлено спустя 1 минуту 5 секунд:
    и, я тебя умоляю, свой говнокод оформляй в ббкоде [code=php][/code] — тебе понравится!
     
  9. w3r3wolfphp

    w3r3wolfphp Новичок

    С нами с:
    20 фев 2015
    Сообщения:
    12
    Симпатии:
    0
    <матное слово> не понял..
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    что находится в $query ?
     
  11. w3r3wolfphp

    w3r3wolfphp Новичок

    С нами с:
    20 фев 2015
    Сообщения:
    12
    Симпатии:
    0
    вывести print_r? но как, у меня браузер отрубает все, только эта строчка показывается, а запрос находится в функции..
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    злой браузер. капец, всё пропало!
     
  13. w3r3wolfphp

    w3r3wolfphp Новичок

    С нами с:
    20 фев 2015
    Сообщения:
    12
    Симпатии:
    0
    Так ты поможешь, или издеваться будешь? Я сразу сказал, что я новичок.
    У меня есть функция, она прописана в модели, как мне из нее выдернуть query и вывести на экран?
     
  14. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А как ты написал модель что теперь не знаешь как с ней работать?)))
    echo $query;
    die();
     
  15. w3r3wolfphp

    w3r3wolfphp Новичок

    С нами с:
    20 фев 2015
    Сообщения:
    12
    Симпатии:
    0
    помогали :)
    все равно въехать не могу, как мне именно к тому запросу обратиться? заново в пустом шаблоне сделать запрос, поместить результат в переменную и вывести ее?
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
     
  17. w3r3wolfphp

    w3r3wolfphp Новичок

    С нами с:
    20 фев 2015
    Сообщения:
    12
    Симпатии:
    0
    Я написал в функции после запроса его вывод, вот что получил:

    (SELECT good_id, name, img, anons, price, hits, new, sale FROM goods WHERE goods_brandid = 4 AND visible='1') UNION (SELECT good_id, name, img, anons, price, hits, new, sale FROM goods WHERE goods_brandid IN ( SELECT brand_id FROM brands WHERE parent_id = 4 ) AND visible='1') ORDER BY LIMIT 0, 9
     
  18. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    ... ORDER BY [что?] ...
     
  19. w3r3wolfphp

    w3r3wolfphp Новичок

    С нами с:
    20 фев 2015
    Сообщения:
    12
    Симпатии:
    0
    А вот вопрос, почему не отображает, массив я вывожу в контроллере..

    $order_p = array(
    'pricea' => array('от дешевых к дорогим', 'price ASC'),
    'priced' => array('от дорогих к дешевым', 'price DESC'),
    'datea' => array('по дате добавления - к последним', 'date ASC'),
    'dated' => array('по дате добавления - с последних', 'date DESC'),
    'namea' => array('от А-Я', 'name ASC'),
    'named' => array('от Я-А', 'name DESC'),
    );
    $order_get = clear($_GET['order']); // получаем возможный параметр сортировки
    if(array_key_exists($order_get, $order_p)){
    $order = $order_p[$order_get][0];
    $order_db = $order_p[$order_get][1];
    }else{
    // по умолчанию сортировка по первому элементу массива order_p
    $order = $order_p['name'][0];
    $order_db = $order_p['name'][1];
    }
     
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    ошибки бывают двух типов:
    1) скопировал чужое не вникая в контекст и
    2) по невнимательности, типа букву пропустил

    отлаживай
         
     
  21. w3r3wolfphp

    w3r3wolfphp Новичок

    С нами с:
    20 фев 2015
    Сообщения:
    12
    Симпатии:
    0
    Всем спасибо за помощь, нашел!
     
  22. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    в другой раз таки оформляй код нормально, прояви уважение к тем, кого просишь вникнуть.