3

いくつかの MS SQL PDO クエリから HTML テーブルを作成しています。またはしようとしています。私が遭遇した最初の障害は、特定のテーブルの列名を取得できないことです。ここで見つかりました、私は私たちに解決策を試みました

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

一方、これは(同じSO投稿から)

$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)]'

列の名前を取得しようとしているだけなので、ループして各行の値を取得できます。どうすればこれを達成できますか? ありがとう

4

2 に答える 2

3

DESCRIBEMySQL 固有のコマンドです。MS SQL では、そのためにストアド プロシージャを使用できます。

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);
于 2013-02-05T03:18:14.953 に答える
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();
        }
于 2016-04-27T12:29:46.317 に答える