CI 묻고 답하기

제목 페이지네이션 작업중 오류
카테고리 CI 2, 3
글쓴이 창쓰 작성시각 2017/08/04 11:53:45
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 12877   RSS
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
 class Write_model extends CI_Model{
   function __construct(){
     parent::__construct();
   }
   public function write_gets(){
     return $this->db->query('SELECT*FROM bookingdb')->result();
   }

   function get_list($table = 'bookingdb',$type='',$offset='',$limit='') {
    $limit_query='';
    if($limit!='' or $offset!=''){
      //페이징 있을경우 처리
      $limit_query = 'LIMIT'.$offset.','.$limit;
      }
    $sql = "SELECT * FROM".$table."order by id desc".$limit_query;

    $query = $this->db->query($sql);

    if($type == 'count'){
      //리스트를 반환하는 것이 아니라 게시물의 개수를 반환
      $result = $query->num_rows();
      //$this->db->count_all($table);
    }else{
      //게시물 리스트반환
      $result = $query->result();
    }

    return $result;
}
}
?>

밑에와 같은 오류를 발생합니다.

왜 그럴까요...ㄷㄷ;;

페이지네이션 작업중입니다..

 

오류내용 :

A Database Error Occurred

Error Number: 1064

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 'FROMorder by id desc' at line 1

SELECT * FROMorder by id desc

Filename: models/Write_model.php

Line Number: 19

 다음글 염치없지만 페이징 관련하여 또 질문드립니다.. (14)
 이전글 코드이그나이터와 PDO (3)

댓글

빛그림 / 2017/08/04 12:36:57 / 추천 0

8번 라인에 SELECT*FROM을 SELECT * FROM으로 * 앞뒤에 공백을 주세요.

17번 라인에 FROM" 을 FROM " 으로 영문자 M과 따옴표 사이에 공백을 주세요.

그리고 "order 에도 " order이 되도록 따옴표와 영문자 o 사이에도 공백을 주시고요.

desc"에도 영문자 c와 따옴표 사이에 공백을 주어야 하고요.

 

"아버지가 방에 들어가신다"와 "아버지 가방에 들어가신다"의 차이 같은... ^^

창쓰 / 2017/08/04 12:55:49 / 추천 0

@빛그림님 말씀대로 작업을 진행하였으나, 동일한 에러가 납니다 ㅠㅠ

8번째 라인 return $this->db->query('SELECT * FROM bookingdb')->result(); // *앞 뒤로 공백을 넣었습니다

17번째라인 $sql = " SELECT * FROM ".$table." order by id desc ".$limit_query;  // 공백을 주었습니다.

또한 c와 따옴표사이에도 공백을 주었지만, 동일한 에러가 발생하고 있습니다 ㅠㅠ

빛그림 / 2017/08/04 13:03:36 / 추천 0

에러메세지의 내용을 보시면 FROM뒤에 테이블명이 나오지 않네요.

$sql = "SELECT * FROM".$table."order by id desc".$limit_query; 을

$sql = "SELECT * FROM bookingdb order by id desc".$limit_query; 으로 수정해보세요.

kaido / 2017/08/04 13:04:07 / 추천 0
        $this->db->from($table);
        $this->db->order_by("id","desc");
        if($limit!='' or $offset!='') $this->db->limit($limit, $offset);
        $query = $this->db->get();
        $data = $query->result();

개인적으로 액티브레코드를 권합니다.

페이지네이션 쿼리는 훨씬 보기 깔끔하게 정리 됩니다.

올려주신 해당 쿼리문에는 바인딩이나 이스케이프문을 넣지 않아서 보안에도 좋지 않습니다.

[액티브는 자동으로 해줍니다.]

 

창쓰 / 2017/08/04 13:12:07 / 추천 0

@빛그림님 말씀대로 수정하였는데,

A Database Error Occurred

Error Number: 1064

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 'LIMIT0,10' at line 1

SELECT * FROM bookingdb order by id desc LIMIT0,10

Filename: models/Write_model.php

Line Number: 19

이번엔 조금 다른 오류가 생겼습니다. 어휴 어렵네요 ㅠㅠ

혹시 제가 db 테이블에 id값 시작을 1부터 설정했는데,

이것때문에 문제가 되는걸까요??ㅠ

창쓰 / 2017/08/04 13:14:09 / 추천 0

@kaido님 답변 감사합니다

참고하여 적용해보도록 하겠습니다.

빛그림 / 2017/08/04 13:16:47 / 추천 0

에러메세지를 보시면 LIMIT0,10이라고 나왔잖아요.

$limit_query 부분이 잘못되어서 그렇습니다. LIMIT 0, 10으로 나와야 해요.

15번 라인에 'LIMIT을 ' LIMIT 으로 해보세요. 공백 삽입

창쓰 / 2017/08/04 13:32:47 / 추천 0
@빛그림 @kaido님 감사합니다! 덕분에 잘 해결되었습니다~ 감사합니다~