2017-08-18 15 views
1

私はMS AccessのDDBBにHTMLフォームからアップロードされたいくつかのファイルを追加する必要があります。 PHP、SQL、ODBCの使用添付ファイルのフィールドを除き、Accessファイルに対しては何の問題もありませんでした。PHPを使用してAccessデータベースに添付ファイルを挿入する方法は?

INSERT INTO TEMAS (DATOSADJUNTOS.FILENAME, DATOSADJUNTOS.FILEDATA) VALUES ("ExampleName.txt", "Wathever") WHERE ID = 4; 

このクエリは、次のエラーが返されます。

SQLSTATE[07009]: Invalid descriptor index: -1003 [Microsoft][Controlador ODBC Microsoft Access] Argumento no válido. (SQLExecute[-1003] at ext\pdo_odbc\odbc_stmt.c:260) 

どんなに私が「Wathever」の代わりに入れたものを、誤差は常に同じではありません。空の文字列である場合を除き、クエリは問題なく実行され、実際に動作します。next image.

クエリをどのように動作させるべきか添付ファイルをMS Access DDBBに挿入する方法は?唯一のPHPとODBCを使用している場合

おかげ

答えて

2

エリックは正しいです:あなたは、ODBCを使用して添付ファイルを挿入することはできません。アクセスDAOは、Accessデータベースエンジンの構成要素であるので、このアプローチは、Microsoft Accessアプリケーションのフルインストールを必要としないこと

$dbe = new COM("DAO.DBEngine.120") or die("Cannot create DBEngine object."); 
$db = $dbe->OpenDatabase("C:\\Users\\Public\\Database1.accdb"); 
$rsMain = $db->OpenRecordset("SELECT DATOSADJUNTOS FROM TEMAS WHERE ID=4", 2); // dbOpenDynaset 
$rsMain->Edit; 
$rsAttach = $rsMain->Fields("DATOSADJUNTOS")->Value; 
$rsAttach->AddNew; 
$fldAttach = $rsAttach->Fields("FileData"); 
$fldAttach->LoadFromFile("C:\\Users\\Gord\\Desktop\\sample.pdf"); 
$rsAttach->Update; 
$rsAttach->Close; 
$rsMain->Update; 
$rsMain->Close; 
$db->Close; 

注:あなたはそうのように、アクセスDAOを使用する必要があります。

+0

私の提案する解決策よりも簡単です!私のPHPの経験はLinuxのみであり、PHPでCOMを使用できるかどうかは分かりませんでした。 –

+1

@ErikvonAsmuth - com_dotnetはWindows版PHPでのみ利用可能で、通常はデフォルトでは有効になっていませんが、php.iniの適切な行のコメントを外してください。ところで、最近あなたは素晴らしい貢献をしてきました。彼らは非常に感謝しています。 –

+0

ありがとうございました! '[COM_DOT_NET] 拡張機能= php_com_dotnetを追加したところ、完全にうまく動作しました。dll' を 'my php.ini'設定ファイルにコピーします。 –

1

は、私の知る限りでは、これは不可能です。 COMまたはコマンドラインを介してAccessと直接インターフェースできるものが必要です。

Accessで特定のフォルダからすべてのファイルをインポートするためにいずれかのマクロを作成することができ、またはコマンドラインに耳を傾け、1つのファイルをインポートします。その後、PHPでshell_execを使用してそれを引き起こすことができます。つまり、コマンドを実行しているサーバー上でAccessを取得する必要があります。

それは容易ではありません。もしあなたが本当にこれをしたいと思うなら、私はあなたにステップの指針を与えることができます。

は、Microsoftの従業員は、ACE ODBCは、添付ファイルフィールドをサポートしていません述べたthis google discussionを参照してください。

(誰かが方法を知っていた場合、私は修正させていただき)

+0

問題は、特定の理由から、私はAccessファイルを編集してはなりませんが、それは、そのままでは動作し、ということです。 私はそれをする方法がないと信じることは難しいです。誰かがそれを理解できる場合に備えて、待ってみましょう。 私たちが最終的にSQLを実行できない場合は、マクロと 'shell_exec'は良いアイデアのように聞こえます。しかし、マクロは別のAccessファイルになければなりません。それはRubé[email protected] –

+0

が、それは複雑だと少し違いは - エリックが正しいです:あなたはODBCを使用して添付ファイルを挿入することはできません。しかし、COMオートメーションやshell_execを使う必要はありません。 Accessデータベースエンジンのコンポーネントに含まれているAccess DAOを使用するだけです。詳細は私の答えを見てください。 –

+0

をそれを行うための有効な方法がありますので、別のファイルにマクロを置く –

関連する問題