如何使用PHP将附件插入Access数据库?

时间:2017-08-18 17:16:51

标签: php sql ms-access

我需要将从HTML表单上传的一些文件添加到MS Access DDBB。 使用PHP,SQL和ODBC我没有任何问题查询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?

由于

2 个答案:

答案 0 :(得分:2)

Erik是对的:您无法使用ODBC插入附件。您需要使用Access DAO,如下所示:

$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;

请注意,Access DAO是Access数据库引擎的一个组件,因此这种方法不需要完全安装Microsoft Access应用程序。

答案 1 :(得分:1)

据我所知,仅使用PHP和ODBC时,这是不可能的。您需要能够通过COM或命令行直接与Access接口的东西。

您可以创建一个宏来从Access中的某个文件夹导入所有文件,或者监听命令行并导入单个文件。然后你可以在PHP中使用shell_exec触发它。这意味着您需要在运行命令的服务器上安装Access。

这并不容易。如果你真的想这样做,我可以给你一些指示。

请参阅this google discussion,其中Microsoft员工声明ACE ODBC不支持附件字段。

(如果某人确实知道某种方式,我很乐意得到纠正)