2017-05-22 5 views
0

odbc_exec()によって取得されたressourcesでodbc_result()を使用してHTMLテーブルのMS Serverでクエリの結果をプロンプト表示しています。PHPのodbcからNtextフィールドを取得したときにFalseの値が返される

私の問題は、ntextフィールドの値がFalseであることです。

この問題を回避するには、RTRIM(CAST(ntext_field AS VARCHAR(8000)))を実行してください。ビューの最後にntextフィールドを入れることもできますが、ディスプレイが混乱することがあります。 これは、クエリを設計するときに、私が使用しているフィールドがわかっていても、それはもはやSELECT * FROM RandomTableクエリでは動作しません。

私の質問は: "どのようにntextフィールドが存在するかどうか、その位置、またはこのタイプのフィールド数に関係なく正しい値を取得できますか?"

T-SQL側とPHP-ODBC側の両方のソリューションが当然受け入れられます。

私は事前にたくさんありがとうございます。

+0

'ntext_field'は推奨されません。 'nvarchar(max)'に変更してやり直してください。 – gotqn

答えて

0

私はfinnaly解決策を見つけたの代わりに、(私のodbc_execに送る)がSELECT * FROM MyTableのようなクエリ機能、私はこの関数を作っ:

$SQLCodePrep = "SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH 
       FROM INFORMATION_SCHEMA.COLUMNS 
       WHERE TABLE_NAME = 'MyTable'"; 

$result=odbc_exec($conn, $SQLCodePrep); 
$ColumnList = QueryPrompter::InsertIntoArray($result); 
       # This function take as argument the result of a query and put each row in an array, and each of these arrays in a bigger array (wich represent the table) 


$SQLCode = "SELECT "; 

for ($i=0; $i<count($ColumnList); $i++) 
{ 
    if (in_array($ColumnList[$i][1], $DefaultArray = array('ntext', 'text', 'image')) OR (in_array($ColumnList[$i][1], $DefaultArray = array('nvarchar', 'varchar')) AND $ColumnList[$i][2] == '-1')) 
    { 
     $Column = "RTRIM(CAST(".$ColumnList[$i][0]." AS VARCHAR(8000))) AS '".$ColumnList[$i][0]."'"; 
    } 
    else 
    { 
     $Column = $ColumnList[$i][0];   
    } 


    if($i < count($ColumnList)-1) 
    { 
     $Column .= ", "; 
    } 

    $SQLCode .= $Column; 
} 


$SQLCode .= " FROM MyTable"; 

私たちが行うために使用し、すべてがとして働いてその後、我々は$result=odbc_exec($conn, $SQLCode);を行うことができます私は欲しかった

関連する問題