не могу понять где ковырять - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming > PHP

PHP Форум как для начинающих программистов на PHP так и для профессионалов этого дела. Если нужно создать скрипт, функцию и т.д, но не знаете как, спросите у нас и мы вам подскажем. Здесь вы найдете примеры скриптов которые вы сможете использовать на сайтах своих серверов (онлайн, регистрация, семь печатей, топ игроков). Так же много книг и статей.

Ответ
Опции темы
Непрочитано 21.04.2015, 21:05   #1
Пользователь

Автор темы (Топик Стартер) не могу понять где ковырять

при открытии страницы в моем магазине с купленными товарами
выдает ошибку
PHP код:
Error Number1064

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 'AS work_price FROM works_sales AS s LEFT JOIN works AS w ON (s.work = ' at line 1

SELECT s
.*, w.* AS work_price FROM works_sales AS s LEFT JOIN works AS w ON (s.work w.idWHERE s.user 1 ORDER BY s.date DESC

Filename
: /var/www/hoske/data/www/site.ru/models/work.php

Line Number
188 


сам запрос вот такого вида
PHP код:
public function get_purchased($id)
    {
        
        
$sql "SELECT s.*, w.* AS work_price FROM works_sales AS s
                LEFT JOIN works AS w ON (s.work = w.id)
                WHERE s.user = " 
$id "
                ORDER BY s.date DESC"
;
        
        
$query $this->db->query($sql);
        
$works $query->result();
        
$result = array();
        foreach(
$works as $work)
            if(!empty(
$work->name))
                
$result[] = $work;
    
        return 
$result;
    } 
Где копать не могу понять
hoske вне форума Ответить с цитированием
Непрочитано 21.04.2015, 21:09   #2
Пользователь

По умолчанию Re: не могу понять где ковырять

Цитата:
Сообщение от BFG13 Посмотреть сообщение
PHP код:
        $sql "SELECT s.*, w.name, w.price AS work_price, [ тут все остальные поля из w ]
                  FROM works_sales AS s
                  LEFT JOIN works AS w ON (s.work = w.id)
                  WHERE s.user = " 
$id "
                  ORDER BY s.date DESC"

множеству полей w.* не присвоишь одно имя work_price, но если конкретное поле w.price то будет работать.

P.S. конкатенировать значения в запрос - зло великое (не повторяйте такое дома). пользуемся prepared statement и забываем про sql injection
Выполнение каких-либо операций по фильтрованию результата, которые можно вынести в запрос - тоже зло. Представьте себе если в таблице 1000000 записей и они будут обрабатываться этим:
Код:
        $works = $query->result();
        $result = array();
        foreach($works as $work)
            if(!empty($work->name))
                $result[] = $work;
    
        return $result;
Добавьте эту проверку на w.name != "" в WHERE и уберите цикл-фильтр
__________________
for(;Forum.getPostCount() < Integer.MAX_VALUE; Forum.writeNewPost()); | TERA Video | GamezTERA Emu

Последний раз редактировалось Aquanox; 21.04.2015 в 22:39.
Aquanox вне форума Ответить с цитированием
Непрочитано 21.04.2015, 21:18   #3
Пользователь

Автор темы (Топик Стартер) Re: не могу понять где ковырять

поле price имеется как в таблице work так и в таблице work_sales но я как понимаю этим запросом я вытаскиваю все из таблицы work_sales так как это должны отображаться купленные товары. Вопрос только как исправить все это?
hoske вне форума Ответить с цитированием
Непрочитано 21.04.2015, 21:20   #4
Пользователь

По умолчанию Re: не могу понять где ковырять

Цитата:
Сообщение от BFG13 Посмотреть сообщение
поле price имеется как в таблице work так и в таблице work_sales но я как понимаю этим запросом я вытаскиваю все из таблицы work_sales так как это должны отображаться купленные товары
На практике использовать * (все поля etc.) стоит только в простейших SELECT запросах. Во всех остальных случаях не ленитесь писать полный список (нужных) полей. Это избавит от проблем после рефакторинга и возможных изменений имен полей и коллизий.

Для отладки запросов пользуйтесь консолью либо explain в Navicat или любого другого GUI к MySQL.
__________________
for(;Forum.getPostCount() < Integer.MAX_VALUE; Forum.writeNewPost()); | TERA Video | GamezTERA Emu
Aquanox вне форума Ответить с цитированием
Непрочитано 21.04.2015, 21:39   #5
Пользователь

Автор темы (Топик Стартер) Re: не могу понять где ковырять

Проблема не решена вышел на файл вывода этой страницы и вот так он выглядит
PHP код:
<?php
        $months 
= array(
            
'01' => 'янв',
            
'02' => 'фев',
            
'03' => 'мар',
            
'04' => 'апр',
            
'05' => 'мая',
            
'06' => 'июн',
            
'07' => 'июл',
            
'08' => 'авг',
            
'09' => 'сен',
            
'10' => 'окт',
            
'11' => 'ноя',
            
'12' => 'дек'
        
);
        
        
$statuses = array(
            
'1' => 'Выбор автора',
            
'2' => 'Ожидает подтверждения автором',
            
'3' => 'Ожидает оплаты',
            
'4' => 'В работе',
            
'5' => 'Согласование',
            
'6' => 'Гарантийная поддержка',
            
'7' => 'Завершен',
            
'8' => 'Просрочен',
            
'9' => 'Завершен арбитражем'
        
);
        
?>
        <div class="tab">
            <div class="thead-tr">
                <div class="tab-date">Дата</div>
                <div class="tab-name">Название работы</div>
                <div class="tab-predmet">Стоимость</div>
                <div class="tab-name"></div>
            </div>
            
            <?php foreach ($works as $work) { ?>
            <div class="tr">
                <div class="tab-date">
                    <em><?php echo (isset($work->date)) ? date('H:i'$work->date) : date('H:i'$work->created); ?><br />
                    <?php echo (isset($work->date)) ? date('d'$work->date) . ' ' $months[date('m'$work->date)] : date('d'$work->created) . ' ' $months[date('m'$work->created)]; ?></em>
                </div>
                <div class="tab-name">
                    <a href="rabota/tema/<?php echo (isset($work->work)) ? $work->id $work->id?>/"><?php echo $work->name?></a>
                </div>
                <div class="tab-predmet"><?php echo $work->price?> руб.</div>
                <div class="">
                    <?php if ($work->status == 2) { ?>Не прошла модерацию.<br />Причина: <?php echo $work->reason?><?php ?>
                    <?php $date = (isset($work->date)) ? $work->date $work->created$limit $work->date 2592000?>
                    <?php if ($limit time()) { ?><a href="upload/rabotu/<?php echo $work->file?>">Скачать</a>&nbsp;(Доступна до: <?php echo date('d.m.Y H:i'$work->date  2592000); ?>)<?php ?>
                </div>
            </div>
            <?php ?>
        </div>
hoske вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять что за *.dat CrazyPioneer Игровой клиент 5 04.11.2012 13:32
Помогите пожалуйста не могу понять что скачал) KOMPoT TERA 8 24.07.2012 01:09
не могу понять!!! Hellp DarckAttack Движки сайтов (CMS) 6 04.03.2010 15:36
Не могу понять? skil Работа со скриптами 25 17.11.2009 22:16


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 15:09. Часовой пояс GMT +3.

Вверх