2011-01-06 15 views
1

편집 :PHP PDO 쿼리 함수

나는 아래의 대화 때문에 아래의 답변을 올바르게 표시하고 있습니다. 답이없는 부품에 대한 답변을 언제든지 보내 주시면 여기에서 다시 확인하겠습니다. 감사.

= - = - = - = - = - = - = - = - 나는 하나 개의 기능이 모두 준비된 명령문을 처리해야하기 위해 노력하고있어

. 이전의 코드에서는 select 쿼리를 통해 mysql_fetch_associng을 수행했습니다. Insert 또는 Update를 수행 할 때 select 및 maybeInsertId 또는 affectedRows 또는 무언가를 수행하는 경우 배열을 반환하고 싶습니다.

제 질문은 'select'또는 'insert'를 위해 sql을 구문 분석하거나 $ type = 'Select'와 같은 함수에 다른 매개 변수를 추가하는 것 외에 데이터가 있는지를 알려주는 PDO 클래스에 뭔가가 있습니까?

fetch 또는 fetchAll에 의해 반환 된 값이 true인지 테스트 할 수있는 곳을 보았습니다. 그게 내가해야할 일이야?

나는이 기능에 대한 의견도 제시한다.

function pdo_query($sql,$data) 
{ 
$stmt = $dbh->prepare($sql); 
$first_row = true; 

if(is_array($data)){ 
    foreach($data as $row){ 
     if(is_array($row)){ 
      foreach($row as $param => $value){ 
       if($first_row){ 
        //http://bugs.php.net/43130 parameters can't have dashes 
        $stmt->bindParam($param, ${substr(str_replace('-','_',$param),1)}); 
       } 
       ${substr(str_replace('-','_',$param),1)} = $value; 
      } 
      $stmt->execute(); 
      $first_row = false; 
     } 
    } 
    while ($row = $stmt->fetch()) { 
     $return[] = $row; 
    } 
} 
return $return; 
} 

편집 : 나는 아직 시도하지 않은,하지만 $ stmnt-을위한 어떤 문제 테스트> 가져 오기()는 무엇입니까? 또한 lastInsertId() 또는 영향을받는 행을 자동으로 가져 오려는 경우 사실 이후에 수행중인 쿼리의 유형을 파악할 수없는 것처럼 보입니다. 여기 내가있는 위치 :

if ($rows = $stmt->fetchAll()) { 
     return $rows; 
    } else if (some_way_of_determining_if_an_insert_happened) { 
     return $dbh->lastInsertId(); 
    } else { 
     return some_way_of_returning_affected_rows 
    } 
} 
+0

왜 수동 바인딩이 필요합니까? 왜 그냥 ($ data)를 실행하지 않는가? –

+0

흠 ... 나는 내가 알고 있다고 생각했다. 나는 바인딩이하는 것을보아야 할 것입니다. 귀하의 의견을 보내 주셔서 감사합니다. – Stephane

+0

나는 한 번 비슷한 접근법을 가졌다 : http://stackoverflow.com/questions/3725879/fetchall-helper-function-using-pdo 그러나 매개 변수는 배열이 아니라 인라인을 사용한다. '$ db-> fetchAll ("SELECT * FROM table where a =? AND b =?", $ a, $ b)'dunno와 같은 것이 더 좋습니다. 그것은 그것이 배열 유형의 경우 매개 변수를 테스트해야하고 결과 값 배열에 아이템을 추가 할 수 있습니다. –

답변

2

너무 똑똑하다고 느끼지 마십시오.

일련의 메소드를 만듭니다.

  • 일반적으로 자원 유형을 반환하는 query이라고하는 일반 사용자입니다.
  • 이 쿼리 메서드를 사용하여 스칼라 값, 행, 열 및 행 집합을 반환하는 도우미 집합입니다.
  • 주어진 리소스에서 영향을받은 행 수, 반환 된 행 수, 삽입 된 ID 수 등을 가져 오는 유틸리티 메소드입니다.

또한 SET 문을 생성하는 방법은 삽입 및 업데이트 메서드와 함께 사용할 때 유용합니다.

예 예에 대한 this one를 참조하십시오 그들을 매개 변수로 링크 식별자를 필요로하지만

//SELECT helpers: 
$username = $db->getOne("SELECT name FROM users WHERE id=?",$id); //getting scalar 
$userinfo = $db->getRow("SELECT * FROM users WHERE id=?",$id); //getting row 
$newsdata = $db->getAll("SELECT * FROM news LIMIT ?,?",$start,$rows); //getting array 

//Select for mass emailing 
$res = $db->query("SELECT * FROM notify WHERE topic_id = ?",$topic); 
$num = $db->numRows($res); 
while ($row = $db->next()){ 
    mail(...); 
} 

//insert 
$res = $db->query("INSERT INTO users SET name = ?",$name); 
$id = $db->lastId(); 

//delete 
$res = $db->query("DELETE FROM users WHERE id = ?",$id); 
$rows = $db->affectedRows(); 

, 내가 affectedRows()와 lastId 방법에 대한 확실하지 않다, 식별자를 자원하지 ....

+0

나는 당신의 요지를 이해하고, 함수와 메소드의 생성 방법을 어떻게 바꿨는가? 고맙습니다. – Stephane