First, I don't think you are likely to use COM calls on a linux box
since COM and DCOM are MS things aren't they?   Even if not, it might
require some configuration on the server end which you can't do.
 
I use the ADOdb database library for PHP in all the things I do:
http://php.weblogs.com/adodb
 
I have a dbconnect.inc file that has all my connect strings in a
switch/case statement that dynamically changes the connect string.
 
I think you can connect DSNLess to an Access database this way.
 
I'll paste a stripped down version of the dbconnect.inc to my message
since I don't know if this list accepts attachments.   Let me know if
you have any questions.. good luck!
 
-TG
 
<?php
include("adodb/adodb.inc.php");
 
ADOLoadCode("ado_mssql");
$db = &ADONewConnection("ado_mssql");
 
switch ($database) {
  ################################################################
  # Cargo System databases
  ################################################################
 
  case "PhotoGallery":
    # Where the photos are stored
    $myDSN="PROVIDER=MSDASQL;DRIVER={SQL
Server};SERVER=PhotoServe;DATABASE=Photos;UID=username;PWD=password;";
    break;
  case "UserLogin":
    # Where the user login information is
    $myDSN="PROVIDER=MSDASQL;DRIVER={Microsoft ODBC for
ORACLE};SERVER=TMPROD;UID=ops;PWD=ops;";
    break;
  case "OtherDB":
    # Sample connect string to Access MDB file
    $myDSN="PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver
(*.mdb)};Dbq='C:\Database.mdb';UID=;PWD=;";
    break;
}
 
$db->Connect($myDSN);
#$db->debug=true;
 
if ($sqlquery <> "") {
  $rs = $db->Execute($sqlquery);
  if ($rs === false) {
    print "<h2>Error: (" . $db->ErrorNo() . ") " . $db->ErrorMsg() .
"</h2><br>\n";
  } else {
    $arr = $rs->GetArray();
    print "Status: (" . $db->ErrorNo() . ") " . $db->ErrorMsg() .
"<br>\n";
  }
} else {
  $rs = $db->Execute($sql);
  if ($rs === false) {
    print "<h2>Error: (" . $db->ErrorNo() . ") " .
$db->ErrorMsg()."<br>$sql<br>\n";
  }
}
 
$sqlquery = "";
$sql = "";
 
$db->Close();
?>
        -----Original Message-----
        From: Alex Gemmell [mailto:[EMAIL PROTECTED] 
        Sent: Wednesday, May 12, 2004 8:12 AM
        To: PHP List
        Subject: [PHP-DB] Linux/PHP/Access Database - oh boy :(
        
        
        Hello all,
         
        I am fairly new to Linux/PHP so please bear with me.  I have an
awfully awkward problem to solve - a stop gap solution for the next 6
months until we have out in-house servers set up and running.  I also
have a very short timeframe to sort this out.  I am using PHP on a
remotely hosted Linux web server to build my website, however I have
been given a MS Access database to use!  Despite my best efforts (and
two days Google trawling) I haven't found a suitable solution so I am
turning to your collective knowledge...
         
        First things first - I do not run the server and cannot install
any new tools on to it (I cannot access the folders above my web root).
There are lots of suggestions on the net about installing MDBTools and
UnixODBC RPM (http://bryanmills.net:8086/archives/000099.html) - but
that involves the admin who won't do it!  I can, of course, put scripts
that may help in the actual web folder and reference them if anyone has
any ideas...
         
        I know I must use a DSN-less connection.  I first tried
connecting directly to the mdb file using:
                    $conn = new COM("ADODB.Connection") or die ("Cannot
create ADODB Connection object."); 
                    
                    //$connstr =
"PROVIDER=MSDASQL;DBQ=/prices/mydb.mdb;"."DRIVER={Microsoft Access
Driver (*.mdb)};" 
                    //$connstr = "Provider=Microsoft,.Jet.OLEDB.4.0;
Data Source=". realpath("prices/mydb.mdb") ." ;";
                    // I've never got the above two connection strings
to work but I include them for completeness and in case any realises
they might help me!
                    $connstr = "DRIVER={Microsoft Access Driver
(*.mdb)}; DBQ=". realpath("prices/mydb.mdb") ." ;";
         
        $conn->open($connstr);
         
        This worked on my localhost running IIS 5 (unsurprisingly) but
fell over immediately on the Linux box.  I am told this is because COM
support in PHP before version 4.3.x is buggy (he PHP version installed
on the server is 4.1.2).  Is this true?  Will upgrading to version 4.3.x
solve all my problems?
         
        Also, I heard that converting the .mdb file to a .dbf file might
help - but how do I connect to that with PHP?  The PHP manual says this
about dbase functions:
        "These functions allow you to access records stored in
dBase-format (dbf) databases. There is no support for indexes or memo
fields."
        That's no good because I have long text fields in the Access
database that are of type "memo"!
        The Manual also says "we recommend that you do not use dBase
files as your production database" - eek!  It's only a small database
(one table with about 50 records, each with no more than 20 fields) so
hopefully it will suffice.
         
        Am I right in thinking I have very few options?   I don't want
to move over to ASP (would that even help?) because it means learning
VBScript and I don't have a lot of time.  Also, I can't use another
database (e.g. MySQL) cos the server admin is NOT helping me and won't
install anything new.
         
        I know 99% of you will want to tell me to just back out of this
horrible tangle and take a different route, but is there one person out
there who can help me get through this nightmare?
         
        Thank you!
         
        Alex Gemmell
        |:| Reply-to: [EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>  |:|
         
        Or call me for free using Skype: 
         <callto://alex.gemmell/> 
         

Reply via email to