Сайт работает на сервере а на Denwer! нет Fatal error: You have an error in your SQL syntax;

Тема в разделе "PHP", создана пользователем gruz222, 11 июл 2012.

Модераторы: latteo
  1. gruz222

    gruz222 Постоялец

    Регистр.:
    8 авг 2008
    Сообщения:
    62
    Симпатии:
    6
    Ребята, подскажите пожалуйста, не могу понять

    есть движок, на сервере работает отлично PHP Version 5.2.6-1+lenny13

    при переносе на локалхост вылазит ошибка:

    Fatal error: 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 '' at line 1
    Query: SELECT * FROM templates WHERE template_id= in E:\webservers\...\temp.class.php on line 357

    на локалхосте PHP Version 5.2.17

    БД и файлы все перенесены верно, почему там работает а у меня нет не понятно,

    пробовал и денвер и опен сервер

    проблемная строка вот
    PHP:
    $query 'SELECT * FROM '.$this->tables['templates'].' WHERE template_id='.$structure['template_id'];
            
    $result $this->dbc->Execute($query);
            if (!
    $result) {
                
    trigger_error($this->dbc->ErrorMsg().'<br>Query: '.$queryE_USER_ERROR);
                return 
    false;
            }
            elseif (
    $result->RecordCount()<>1) {
                die(
    '404 (tpl)');
            }[
     
    Последнее редактирование модератором: 26 мар 2015
  2. pixelranger

    pixelranger

    Регистр.:
    24 июн 2006
    Сообщения:
    386
    Симпатии:
    117
    PHP:
    $query "SELECT * FROM ".$this->tables['templates']." WHERE template_id='".$structure['template_id']."'";
    Попробуй так
     
    Последнее редактирование модератором: 26 мар 2015
  3. gruz222

    gruz222 Постоялец

    Регистр.:
    8 авг 2008
    Сообщения:
    62
    Симпатии:
    6
    pixelranger

    Спасибо за совет, ошибка, конечно исчезла, но я это и сам пробовал, только сайту от этого легче не стало (белый экран и ошибки типа:(

    Notice: Undefined variable: path in E:\webservers\.... on line 260

    Notice: Undefined index: type in E:\webservers\.... line 313

    Notice: Undefined index: type in E:\webservers\.... line 317

    Notice: Undefined index: s_id in E:\webservers\.... on line 342

    Notice: Undefined index: cache_id in E:\webservers\.... on line 342

    и т.д.

    эти ошибки сопутствовали предыдущей ошибке fatal error


    Мне вот, что еще интересно, почему это гад на сервере работает а у меня нет?

    тут еще 1 момент - это движок 1-ой студии, может они там что-то специально придумали?
     
  4. CnecHa3

    CnecHa3 Постоялец

    Регистр.:
    10 фев 2007
    Сообщения:
    105
    Симпатии:
    20
    1. раз так много нотайсов значит скрипт whatever написал плохо, ибо под каждым нотайсом может быть более критическая ошибка
    2. сервер это production там стоит error_reporting(0); ini_set('display_errors', false); я думаю если посмотришь в логи сайт, то увидишь там куча ошибок
    3. локальная машина (Denwer) это dev, там где error_reporting(E_ALL); ini_set('display_errors', true);
     
  5. Ruskai

    Ruskai

    Регистр.:
    19 июн 2007
    Сообщения:
    303
    Симпатии:
    98
    Немного не верно, это не исключает того, что $structure['template_id'] = '', или не задано вообще, или содержит sql injection.
    То есть, как вариант (если $structure['template_id'] не целое число:(
    PHP:
    $structure['template_id'] = trim($structure['template_id']);
     
    if(
    $structure['template_id'] && !empty($structure['template_id'])){
     
    $query sprintf('SELECT * FROM \'%s\' WHERE template_id=\'%s\'',$this->tables['templates'],$structure['template_id']);
     
    $result $this->dbc->Execute($query);
     
    if (!
    $result) {
     
    trigger_error($this->dbc->ErrorMsg().'<br>Query: '.$queryE_USER_ERROR);
     
    return 
    false;
     
    }
     
    elseif (
    $result->RecordCount()<>1) {
     
    die(
    '404 (tpl)');
     
    }
     
    } else {
     
    die(
    '404 (tpl)');
     
    }
    И проверьте, какие функции экранируют символы перед помещением в запрос, по типу mysql_real_escape_string,mysqli_real_escape_string(),PDO::quote().
    И что за идиотская система, которая прет ошибки в браузер посетителя? Лучше бы в бд или файлы складывала. Мечта хакера, прямо.
     
  6. BACZ

    BACZ

    Регистр.:
    18 июн 2008
    Сообщения:
    608
    Симпатии:
    379
    notice сыплются потому что на сервере и на денвере register_globals установлены в разные значения например (на денвере вроде off) Вообще для начала в phpinfo невредно глянуть. А затем тупо выкидывать $query в var_dump($query)
     
  7. Flayer1993

    Flayer1993 Создатель

    Регистр.:
    31 мар 2014
    Сообщения:
    13
    Симпатии:
    1
    Да, проблема именно в register_globals. У тебя в скрипте используется вызов переменных на Register Globals ON. Поэтому некоторые переменные при выключеных reg_globals не существуют. Вот и появляются нотисы, а также скрипт не работает, т.к. пытается вытащить данные из переменных которые не существуют.