2017-09-27 2 views
1

Ich habe erfolgreich gelesen von 4D mit PDO, aber nicht zu schreiben.Schreiben in 4D mit PDO

Wenn ich versuche, Werte in die Datenbank einfügen ich die folgende Fehlermeldung erhalten:

SQLSTATE[HY000]: General error: 1248 Failed to execute statement.

Hier ist mein Code:

<?php 
$dsn = 'dsn-info'; 
$user = 'user-info'; 
$pswd = 'password'; 

$db = new PDO($dsn, $user, $pswd); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Display PDO errors 

$statement = $db->prepare("INSERT INTO order(dealer, customer) VALUES(:dealer, :customer)"); 

$statement->execute(array(
    "dealer" => "Test Dealer", 
    "customer" => "Test Customer" 
)); 
?> 

nur, um herauszufinden, ob es mit etwas nicht in Ordnung ist mein INSERT-Anweisung oder wenn etwas auf der 4D-Seite der Dinge geändert werden muss, um mir eine schriftliche Erlaubnis zu geben.

+0

'Order' ist ein reservierter Begriff (ich glaube, ich bin nicht vertraut mit "4D"). Wenn dies ein mysql-Subsystem ist, denke ich, dass es 'INSERT INTO \' order \ '' – chris85

+0

sein sollte Vergessen Sie nicht die doppelten Punkte? -> array (": dealer" => "Test Dealer", ": Kunde" => "Test Kunde") – YaatSuka

+1

@YaatSuka PDO auto fügt die Doppelpunkte der Bindung hinzu, wenn sie fehlen. – chris85

Antwort

1

Die Abfrage zur Verfügung gestellt wird ein SQL reserviertes Wort:

INSERT INTO order(dealer, customer) VALUES(:dealer, :customer) 

Diese Abfrage verwendet ORDER als Tabellennamen jedoch ORDER ein SQL reserviertes Wort ist.

Wenn Sie in der 4D Struktureditor der Tabelleninspektor an diesem Tisch sehen wären, würden Sie so etwas wie dies sehen:
enter image description here

Sie können diese Tabelle nicht über SQL zugreifen, sollten Sie es umbenennen.

Bitte sehen Sie diese Tech-Tipp: Tech Tip: Guidelines for SQL compatible field names

+0

Ich habe den Tabellennamen in AppOrds geändert, um die Verwendung eines reservierten Wortes zu vermeiden, also habe ich jetzt "INSERT INTO AppOrds (Händler, Kunde) VALUES (: dealer,: customer)" '. Leider bekomme ich immer noch den gleichen Fehler. – Tyler