2012-07-01 2 views
0

PDO를 처음 사용합니다. 여기 내 기능이있다. 우리는 데이터베이스에 연결되어 있고 모든 것이 작동하지만이 함수를 호출하면 실행될 나머지 PHP가 종료됩니다. 분명히 뭔가 잘못되었습니다. PHP PDO가 표준 기능을 실행합니다.

$dbh = new PDO("mysql:host=$host;dbname=$database", $username, $password); 
     global $dbh; 

     /*** set the error reporting attribute ***/ 
     $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

function selectall($table){ 
      $stmt = $dbh->prepare("SELECT * FROM :table"); 
      $stmt->bindParam(':table', $table, PDO::PARAM_STR,20); 
      $stmt->execute(); 
      $result = $stmt->fetchAll(); 
      return $result; 
     } 

이 같은 페이지에서 호출 :

<?php $telephones = selectall('telephone'); foreach($telephones as $telephones) { echo $telephone['title'].', '; } ?> 

/// 편집 - 나는 당신의 모든 방법을 시도하고 페이지에서 호출 할 때 함수는 여전히 파괴된다. 다음은 전체 코드입니다. 테스트 용으로 약간 수정되었습니다.

try { 

     $dbh = new PDO("mysql:host=$host;dbname=$database", $username, $password); 

     /*** set the error reporting attribute ***/ 
     $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $sql = "SELECT * FROM system"; 
     foreach ($dbh->query($sql) as $row) 
      { 
      $url = $row['url']; 
      $election = $row['election']; 
      $election_date = $row['election_date']; 
      $sitename = $row['sitename']; 
      } 


     //FUNCTION 

     function selectall($table){ 
      global $dbh; 
      $sql = "SELECT * FROM telephone"; 
      foreach ($dbh->query($sql) as $row){ 
       print $row['title'] .' - '. $row['name'] . '<br />'; 
      } 
     } 


     /** close database connections **/ 
     $dbh = null; 

    } 

    catch(PDOException $e) { 

     echo $e->getMessage(); 

    } 

함수 밖의 코드 즉. 테이블 시스템을 반영하는 함수는 완벽하게 작동합니다. 그러나 나중에 함수로 호출 될 때 함수 내부의 함수는 호출 된 후 실행되지 않고 모든 것을 종료합니다.

+2

식별자 (db/column/tablenames), 함수 이름 등의 매개 변수를 사용할 수 없습니다. 이는 작동 방식이 아닙니다. – Wrikken

+0

이것은 실제로 작동합니까? '$ dbh '는 처음부터 어디서 오는가? 또한 오류를 검사하는 방법은 무엇입니까? – deceze

+0

마찬가지로 나는 우리가 이미 데이터베이스에 연결되어 있다고 말했다. –

답변

0

두 번째 라인은, 치명적인 오류가 발생합니다.

global $dbh; 

또는 함수에 매개 변수로 전달합니다

는이 같은 글로벌 범위를 가져와야합니다.

이 문제를 해결 한 후에는 식별자 (테이블 또는 열 이름 또는 제한 및 오프셋)에 매개 변수를 사용할 수 없으므로 코드가 작동하지 않습니다. 불행히도 거기에 문자열 연결을해야합니다.

+0

OK 변수를 제거하고 대신 데이터베이스의 테이블 이름을 제거했습니다. Still Nothing –

+0

또한이 함수 앞에 코드를 추가하여 제공 한 것처럼 글로벌 필요성을 무효화 할 것이라고 생각합니다. –

+0

아니요, 함수에 global 문을 추가하여 $ dbh가 전역 범위에 있음을 PHP에 알릴 필요가 있습니다. – Maerlyn

0

나는 문제가 생각 : $telephones as $telephones

이 시도 : 당신이 개체로 정의되지 않은 변수 ($dbh)를 사용하려고 할 때

$telephones = selectall('telephone'); foreach($telephones as $telephone) { echo $telephone['title'].', '; } 
+0

그건 바보 같은 오타입니다. 어쨌든 고맙겠습니다. 우리 모두가 때때로 이런 것들을 놓칠 수 있습니다. –

관련 문제