1

したがって、4つのテーブルがあり、そのうちの2つにnull値があります。これが、「キャッチ可能な致命的なエラー:クラスバリアントのオブジェクトを文字列に変換できませんでした」の理由であると考えています。

私のテーブルは

table1(dbo.FA_PC)  
FAID(pk)  
PCID(fk)  

table2(dbo.PC)  
PCID(PK)  
PCCPUTypeID(fk)(some values are null/empty)  

table3(dbo.PC_CPU_Type)  
PCCPUTypeID(PK)  
CPU  
BrandID(fk)(some values are null/empty)  

table4(Brand)  
BrandID(PK)  
Brand  

だから私のコードとselectステートメントはこのようになります

<?php
$faidf=$_POST['faidf'];
ini_set("display_errors","on");
$conn = new COM("ADODB.Connection");
   try {
   $myServer = "WTCPHFILESRV\WTCPHINV";
   $myUser = "sa";
   $myPass = "P@ssw0rd";
   $myDB = "wtcphitinventory";   
   $connStr = "PROVIDER=SQLOLEDB;SERVER=".$myServer.";UID=".$myUser.";PWD=".$myPass.";DATABASE=".$myDB;
   $conn->open($connStr); 
         if (! $conn) {
            throw new Exception("Could not connect!");
        }
   }

   catch (Exception $e) {
      echo "Error (File:): ".$e->getMessage()."<br>";
   }
if (!$conn)
  {exit("Connection Failed: " . $conn);}
   $sql_exp = "SELECT  c.CPU, d.Brand
FROM    dbo.FA_PC a
        INNER JOIN dbo.PC b
        on a.PCID = b.PCID
        INNER JOIN dbo.PC_CPU_Type c
            ON b.PCCPUTypeID = c.PCCPUTypeID    
        INNER JOIN dbo.Brand d
            ON c.BrandID = d.BrandID
WHERE   a.FAID = $faidf AND c.PCCPUTypeID is NOT NULL and c.BrandID is NOT NULL";    
   $rs = $conn->Execute($sql_exp);  
    echo "<tr><td>".$rs->Fields("Brand")."-".$rs->Fields("CPU")."</td>";

       $rs->Close();      
?>  

whereステートメントが間違っているかselectステートメントが少しずれているか、「キャッチ可能な致命的なエラー:クラスバリアントのオブジェクトを文字列に変換できませんでした」というエラーの原因は何ですか

4

1 に答える 1

1

これは文字列型ではないオブジェクトを返している$rs->Fields("Brand")と思います。文字列であるかのように連結しようとしています。まず、このオブジェクトを文字列にキャストするか、必要な文字列データを保持するこのオブジェクトのプロパティにアクセスする必要があります。

次のようにフィールドデータをフェッチする代わりに、次の$rs->Fields("Brand")ようにします。

$rs->fields["Brand"]->value

次のようにレコードをトラバースしてみてください。

while (!$rs->EOF){ 
  echo '<tr><td>'.$rs->fields["Brand"]->value.'-'.$rs->fields["CPU"]->value.'</td></tr>'; 
  $rs->movenext(); 
}
于 2013-02-11T08:35:15.883 に答える