2014-03-07 2 views
-2

나는 이것을 작동 시키려고 몇 시간 동안 노력했습니다. 나는이 점점 계속PDO PHP MYSQL 명명 된 위치 매개 변수가 섞여 있습니다.

<?php 

require_once('inc.connect.php'); 

if($_SERVER['REQUEST_METHOD'] == 'GET') 
{ 
    if(isset($_REQUEST)) 
    { 
     $type = array_keys($_REQUEST)[0]; 
     $value = $_REQUEST[$type]; 
     if($value === null) 
     { 
      $where_like = null; 
     } 
     else 
     { 
      $where_like = ' WHERE ' . $type . '_name LIKE ?'; 
     } 

     $db = new PDO('mysql:host=' . MYSQL_HOST . ';dbname=' . MYSQL_DBNAME . ';charset=UTF8', MYSQL_USERNAME, MYSQL_PASSWORD); 
     $sql_statement = 'SELECT :' . $type . '_id, :' . $type . '_name FROM report_' . $type . $where_like; 

     $sql_prepare = $db->prepare($sql_statement); 

     if(!(is_null($where_like))) $sql_prepare->bindValue(1, '"%' . $value . '%"', PDO::PARAM_STR); 

     try{ 

      while($sql_result = $sql_prepare->execute()) 
      { 
       $return[$sql_result[$type . '_id']] = $sql_result[$type . '_name']; 
      } 

      $return_JSON = json_encode($return); 
     } 
     catch(PDOException $exception){ 

      return $exception->getMessage(); 
     } 
     echo "exception: ".$exception; 
    } 
} 

...

경고 : PDOStatement :: 실행() : SQLSTATE는 [HY093] : 잘못된 매개 변수 번호 :라는 이름의 혼합 및 위치 매개 변수

+2

문 준비는 다음과 같이 사용되지 않습니다. 미리 정의 된 쿼리를 사용하고 런타임에 생성하지 마십시오. 튜토리얼을보고 전체 코드를 다시 작성하십시오. –

+0

왜 안 되니? 나는 그들이 이런 식으로 일반적으로 사용되지는 않는다는 것을 알고 있지만 동적으로 쿼리를 생성하는 데는 아무런 문제가 없다고 생각합니다. –

+2

잘못된 것이 없다면 왜 작동하지 않습니까? 미리 정의 된 쿼리를 사용하는 것이 가장 좋습니다. 그것은 분명하고, 이해할 만하 며, 지금 당장 알 수있는 것처럼 고통스럽지 않습니다. –

답변

1

한 가지 내가 안정적인 직업을 갖는 것에 대한 사랑은 더 이상 내 stackoverflow 게시물이 잠재적 인 고용주에게 어떤 것인지 걱정할 필요가 없다는 것입니다. 그 정신에서 당신의 상식juergen d은 그러한 비협조적인 "소소한"이유로 "산책"을 할 수 있습니다.

jQueryUI autocomplete ({source}) 옵션으로 요청한 AJAX 응답입니다.

여기 내 완성, 작업 코드의 ...

<?php 

require_once('inc.connect.php'); 

if($_SERVER['REQUEST_METHOD'] == 'GET') 
{ 
    if(isset($_REQUEST)) 
    { 
     $type = array_keys($_REQUEST)[0]; 

     if(in_array($type, ['category', 'sub_category', 'names', 'report_searches', 'report_favs'])) 
     { 
      $value = $_REQUEST[$type]; 
      $id  = $type . '_id'; 
      $name = $type . '_name'; 
      $table = 'research_' . $type; 
      $where = $name; 
      $like = '%' . $value . '%'; 

      $value === null ? $where_like = null : $where_like = ' WHERE ' . $where . ' LIKE ?'; 

      $sql_db = new PDO('mysql:host=' . MYSQL_HOST . ';dbname=' . MYSQL_DBNAME . ';charset=UTF8', MYSQL_USERNAME, MYSQL_PASSWORD); 
      $sql_statement = 'SELECT ' . $id . ', ' . $name . ' FROM ' . $table . $where_like; 
      $sql_prepare = $sql_db->prepare($sql_statement); 

      if(!($value === null)) $sql_prepare->bindParam(1, $like); 

      try{ 
       if($sql_prepare->execute()) 
       { 
        while($sql_result = $sql_prepare->fetch(PDO::FETCH_ASSOC)) 
        { 
         $return[$sql_result[$id]] = $sql_result[$name]; 
        } 

        echo json_encode($return); 
       } 
      } 
      catch(PDOException $e) 
      { 
       echo $e->getMessage(); 
      } 
     } 
    } 
} 
관련 문제