2017-05-22 8 views
0

odbc_exec()를 통해 얻은 ressources에서 odbc_result()를 사용하여 HTML 테이블에서 MS Server에 대한 쿼리 결과를 묻습니다.PHP 데이터베이스를 통해 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);을 수행 할 수 있습니다 및 모든으로 작동 내가 원했던 것