PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP ODBC Access


KTB
06.11.2006, 12:20:20
Hallo zusammen, ich hab mal wieder einen Leckerbissen von Frage an euch:
Wie realisiere ich den Zugriff über PHP auf eine Access-Datenbank.
Habe mir schon etliche Tutorials und erklärungen durchgelesen (z.B (http://de2.php.net/manual/en/function.odbc-connect.php#56734))., funktioniert aber trotzdem irgendwie nicht.
Code:$con=odbc_connect('TestAccess','','');
if ($con)
{
echo "odbc connected<br>";
$sql = "select * from Tab1";

$exc = odbc_exec($con,$sql);
}
else
echo "odbc not connected<br>";
odbc_close($con);Ich bekomme darauf den folgenden Fehler:
Warning: odbc_connect(): SQL error: [Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben, SQL state IM002 in SQLConnect in Y:\minixampp\htdocs\odbc\index.php on line 2

Der Standardtreiber ist installiert und der Name ist korrekt übernommen worden.

BenniG.
06.11.2006, 13:10:23
Ich sehe hier doch den einen oder anderen unterschied:
$con=odbc_connect('TestAccess','','');
vs
odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . str_replace("/", "\\", $_SERVER["DOCUMENT_ROOT"]) . "\_database\dbname.mdb", "", "")

Hast du eine System-DSN oder User-DSN mit dem Namen TestAccess angelegt? Verwaltung->ODBC->System/Benutzer Datenquellen?

Edit: Bei Access in einer Webanwendung stellen sich mir übrigens sämtliche Haare auf! Ich hatte da oft Probleme dass die Datenbank nach einigen Tagen nichtmehr ging und "repariert" werden musste.. Bei massiven Benutzerzahlen kann man diese Lösung absolut vergessen!

meikel (†)
06.11.2006, 13:22:25
Edit: Bei Access in einer Webanwendung stellen sich mir übrigens sämtliche Haare auf!
Jau. Da kriegt man Pickel...

Bei massiven Benutzerzahlen kann man diese Lösung absolut vergessen!
Es reichen schon mehrere zeitgleiche Zugriffe.

KTB
06.11.2006, 14:16:00
Jo, übersehen...hab weiter unten geschaut. Nun funktioniert der Connect.
Tabelle sieht so aus:
Tab1
ID, Feld1, Feld2, Feld3

Abgefragt wird das mit den Befehlen:
if ($con)
{
echo "odbc connected<br>"; //gibt er aus
$sql = "select * from Tab1";

//this function will execute the sql satametn in
//correspondance to the table in the db
$exc = odbc_exec($con,$sql);
}
else
echo "odbc not connected<br>";

if($exc)
{
echo "selection completed<br>"; //gibt er aus
while($row = odbc_fetch_row($exc) )
echo $row->Feld1."<br>";
}
else
echo "selection failed<br>";Leider gibt er nicht mehr aus, was habe ich immer noch nicht beachtet?

BenniG.
06.11.2006, 14:22:14
Bitte IMMER {} benutzen bei if, while for, etc. Du wirst dir noch in den Hintern beißen, wenn du das nicht immer machst (auch wenn du nur einen Befehl in der Schleife ausführst) und dann Erweiterungen machst.. Gibt sehr lustige Ergebnisse

Zum Problem.. Manual zu odbc_fetch_row mal anschauen (leider sind die Beschreibungen zu ODBC recht blöd) was Du suchst ist odbc_fetch_object

while($row = odbc_fetch_object($exc) ) {
echo $row->Feld1."<br>";
}

KTB
06.11.2006, 14:25:10
Bingo, Gracias.