PDO und query() mit ODBC
am 28.02.2006 17:30:39 von Johannes Mueller
Hallo NG,
ich versuche jetzt schon eine ganze weile mit PDO einen String in meine
Access-Datenbank zu schreiben, ohne viel Erfolg.
mein System:
WinXP SP2
Access 2003
PHP 5.1.2
Apache 2.0.55
--code--
try{
$dbh = new PDO('odbc:TestDB');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->query('INSERT INTO test ([key], [value], [note], nr) VALUES
(50,50.4,"test", 2)');
} catch (Exception $e) {
print "Error!: " . $e->getMessage();
die();
}
$dbh = null;
--/code--
meine Tabelle test in TestDB ist folgendermassen aufgebaut:
+----------+----------+-----------------+----------+-------- -+
| (auto)id | (int)key | (currency)value |(str)note | (int)nr |
+----------+----------+-----------------+----------+-------- -+
Also 2 Fragen:
1.tens: wieso versucht mein Apache eine Fehlermeldung ins WEB zu
senden, wenn ich bei den Spaltennamen "key", "note" und "value" die
eckigen Klammern im Query entferne? - sprich, wieso stürzt er ab?
2.tens: Wieso spuckt er mir sobald ich [note] im Query und bei den
values einfüge folgenden Fehler aus[1], nicht aber, wenn ich note
weglasse?
[1] Error!: SQLSTATE[07002]: COUNT field incorrect: -3010
[Microsoft][ODBC Microsoft Access Driver] 1 Parameter wurden erwartet,
aber es wurden zu wenig Parameter übergeben. (SQLExecute[-3010] at
ext\pdo_odbc\odbc_stmt.c:133)
Weiss jemand dazu rat?
Vielen dank schonmal
Johannes
--
Emails ohne "[nospam]" im Betreff werden kommentarlos gelöscht.
Re: PDO und query() mit ODBC
am 28.02.2006 19:12:27 von Johannes Mueller
Johannes Mueller schrieb:
....Stunden später...
> 1.tens: wieso versucht mein Apache eine Fehlermeldung ins WEB zu
> senden, wenn ich bei den Spaltennamen "key", "note" und "value" die
> eckigen Klammern im Query entferne? - sprich, wieso stürzt er ab?
Also:
Schlüsselwörter müssen bei ACCESS in eckigen Klammer stehen: sowohl
KEY, als auch VALUE sind schlüsselwörter, warum NOTE auch ein
Schlüsselwort sein soll ist mit noch nicht ganz klar.
> 2.tens: Wieso spuckt er mir sobald ich [note] im Query und bei den
> values einfüge folgenden Fehler aus[1], nicht aber, wenn ich note
> weglasse?
>
> [1] Error!: SQLSTATE[07002]: COUNT field incorrect: -3010
> [Microsoft][ODBC Microsoft Access Driver] 1 Parameter wurden
> erwartet, aber es wurden zu wenig Parameter übergeben.
> (SQLExecute[-3010] at ext\pdo_odbc\odbc_stmt.c:133)
Also:
das Problem ist, dass der Query in einfachen Anführungszeichen ist und
die Werte der Strings in doppelten Anführungszeichen - so geht es
nicht. Andersrum geht es dann aber sehr wohl. Merke: Query in doppelten
Anführungszeichen und Werte in einfachen Anführungszeichen.
Schönen Abend noch
Johannes
PS: ich geh jetzt in mein Wuttuch beissen!
--
Emails ohne "[nospam]" im Betreff werden kommentarlos gelöscht.
Re: PDO und query() mit ODBC
am 28.02.2006 21:40:06 von Helmut Chang
Johannes Mueller schrieb:
> Also:
> das Problem ist, dass der Query in einfachen Anführungszeichen ist und
> die Werte der Strings in doppelten Anführungszeichen - so geht es nicht.
Strings in SQL gehören auch in Single Quotes. Das ist Standard SQL.
> Andersrum geht es dann aber sehr wohl. Merke: Query in doppelten
> Anführungszeichen und Werte in einfachen Anführungszeichen.
Oder Prepared Statements in DBO verwenden (sollte das für ODBC
unterstützt werden).
gruss, heli