2013-02-05 36 views
3

我從一些MS SQL PDO查詢構建HTML表。或試圖。我遇到的第一個障礙是我無法獲得特定表的列名。發現here,我一直在努力,我們的解決方案在mssql中獲取列名pdo

function getColumnNames(){ 

$sql = "select column_name from information_schema.columns where table_name = 'myTable'"; 
#$sql = 'SHOW COLUMNS FROM ' . $this->table; 

$stmt = $this->connection->prepare($sql); //this is the line that triggers the error 

try {  
    if($stmt->execute()){ 
     $raw_column_data = $stmt->fetchAll(PDO::FETCH_ASSOC); 

     foreach($raw_column_data as $outer_key => $array){ 
      foreach($array as $inner_key => $value){ 
         if (!(int)$inner_key){ 
          $this->column_names[] = $value; 
         } 
      } 
     } 
     } 
     return $this->column_names; 
    } catch (Exception $e){ 
      return $e->getMessage(); //return exception 
    }   
} 

getColumnNames(); 

得到了錯誤:

Fatal error: Using $this when not in object context 

而這(從相同的,所以後)

$q = $dbh->prepare("DESCRIBE username"); 
$q->execute(); 
$table_fields = $q->fetchAll(PDO::FETCH_COLUMN); 
print_r($table_fields); 

產生錯誤:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2812 General SQL Server error: Check messages from the SQL Server [2812] (severity 16) [(null)]' 

我只是想獲取列的名稱,以便我可以循環並獲取其每行的值。我怎樣才能做到這一點?謝謝

回答

3

DESCRIBE是MySQL特定的命令。在MS SQL可以使用strored程序爲:

exec sp_columns MyTable 

你會在MSDN

找到文檔又來了一個小例子,如何這可以使用PDO來完成:

<?php 

// will contain the result value 
$return = null; 

// replace table name by your table name 
$table_name = 'table_name'; 

// prepare a statement 
$statement = $pdo->prepare("exec sp_columns @table_name = :table_name"); 

// execute the statement with table_name as param 
$statement->execute(array(
    'table_name' => $table_name 
)); 

// fetch results 
$result = $statement->fetchAll($sql); 

// test output 
var_dump($result); 
+0

感謝您指點我的文檔。雖然我不明白我必須做什麼。你能告訴我一個例子嗎? – 1252748

+0

不幸的是,我沒有用於測試的MS SQL服務器。我發現[this](http://www.php.net/manual/en/ref.pdo-dblib.php#101323)。它有幫助嗎? – hek2mgl

+0

不幸的是沒有這麼多。我對準備好的陳述並不十分了解。現在就試圖深入研究它們。感謝您的幫助 – 1252748

0

這是一個老問題,但我會添加我學到的東西。我設法通過這樣做來獲得列值。

try { 
      $query = $this->db->prepare("DESCRIBE posts"); 
      $query->execute(); 
     //retrieve the columns inside the table posts 
      $forumrows = $query->fetchAll(PDO::FETCH_COLUMN); 
      //var_dump($forumrows); 
     //Output each column Id with its Value 
      foreach($forumrows as $forumrow) { 
       echo $forumrow . "</br>"; 
     } 
      } catch(PDOException $e) { 
       echo $e->getMessage(); 
     }