- Ad -
php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 24-01-2008, 21:59
lippes
 Newbie
Links : Onlinestatus : lippes ist offline
Registriert seit: Dec 2007
Ort: southern germany
Beiträge: 5
lippes ist zur Zeit noch ein unbeschriebenes Blatt
Standard Hilfe zu Syntax-Fehler bei PDO prepared Statements

Hi!

Ich habe - glaub ich - eine typische newbie-Frage, komme aber selbst nicht mehr weiter und wäre daher für sachdienliche Hinweise dankbar.

Bei der nachfolgenden DB-Abfrage erhalte ich die Fehlermeldung:

Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? OR plz =?' at line 1 )

Bei den Variablen plz1 und plz2 handelt es sich um zwei Postleitzahlen des Typs char, die Verbindung mit der DB erfolgt weiter vorn und macht funktioniert einwandfrei. Sind für die Analyse sonst noch INfos notwendig?


PHP-Code:
if ($_POST) {
    
// connect to MySQL
    
$conn dbConnect('query');
    
$sql "SELECT * FROM geoplz WHERE plz =? OR plz =?";
    
$stmt $conn->prepare($sql);
    
// execute query by passing array of variables
    
$stmt->execute(array($_POST['plz1'], $_POST['plz2']));
    
$result $conn->query($sql);
    
$error $conn->errorInfo();
    echo 
print_r($error,$result);
    } 
P.S.: Das ist mein erster Post im Forum und ich habe mich noch nicht vorgestellt. Bin thirtysomething und wie man wahrscheinlich merkt blutiger Änfänger. Trotzdem habe ich mir eingebildet, ein eigenes kleines Projekt auf die Füße zu stellen. Habe mich in den letzten Wochen durch die PHP- und SQL-Grundlagen gewühlt/gelesen (bei CSS bin ich noch ziehmlich blank) und will jetzt mit einfacheren scripts Übung zu bekommen. Es ist also noch ein weiter WEg...

lippes
Mit Zitat antworten
  #2 (permalink)  
Alt 24-01-2008, 22:48
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.104
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Hmm, das sieht eigentlich richtig aus. Bist du sicher, das in $_POST was drin steht? if( $_POST ) reicht zur Kontrolle auch nicht aus! Gib dir das Array mal aus und zeig mal her, was drin steht.
__________________
iocstreamscanvas
Mit Zitat antworten
  #3 (permalink)  
Alt 24-01-2008, 22:53
lippes
 Newbie
Links : Onlinestatus : lippes ist offline
Registriert seit: Dec 2007
Ort: southern germany
Beiträge: 5
lippes ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke für die schnelle Antwort!

Das Array sieht eigentlich o.k. für mich aus:

Array ( [plz1] => 12345 [plz2] => 13579 [send] => Senden )
Mit Zitat antworten
  #4 (permalink)  
Alt 24-01-2008, 22:56
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.104
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Hast du es mal mit bindValue probiert?
BTW: Dein error_reporting steht auf E_ALL und display_errors ist an?
__________________
iocstreamscanvas
Mit Zitat antworten
  #5 (permalink)  
Alt 24-01-2008, 22:58
lippes
 Newbie
Links : Onlinestatus : lippes ist offline
Registriert seit: Dec 2007
Ort: southern germany
Beiträge: 5
lippes ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Habe

error_reporting(E_ALL);

am Anfang meines skripts eingefügt. Genügt das?

BindValue sagt mir nix, muss erst mal nachschlagen..
Mit Zitat antworten
  #6 (permalink)  
Alt 24-01-2008, 23:00
lippes
 Newbie
Links : Onlinestatus : lippes ist offline
Registriert seit: Dec 2007
Ort: southern germany
Beiträge: 5
lippes ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ah ja bindValue...nein, hab ich noch nicht probiert, weil ich dachte so müsste es funktionieren

Ich werde es morgen damit mal versuchen...
Mit Zitat antworten
  #7 (permalink)  
Alt 25-01-2008, 23:38
lippes
 Newbie
Links : Onlinestatus : lippes ist offline
Registriert seit: Dec 2007
Ort: southern germany
Beiträge: 5
lippes ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das Problem ist gelöst!

Eine Abfrage mit PDO prepared statements muss prinzipiell nach folgendem Schema ablaufen (eine große Hilfe war mir dabei die PHP-Funktionsreferenz):

prepare() bereitet die DB-Abfrage mit Platzhaltern vor
execute() führt die Abfrage aus
fetch() bzw. fetchAll() ruft die Ergebnisse ab

query() dagegen macht in etwa das gleiche wie execute() und fetch() zusammen, bietet allerdings nicht die Möglichkeit mit Platzhaltern zu arbeiten. Seh ich das richtig?

Meine funktionierende Abfrage sieht jetzt so aus:

PHP-Code:
<?php
if ($_POST) {
    
$conn dbConnect('query');
    
$stmt $conn->prepare("SELECT * FROM geoplz WHERE plz =? OR plz =?");
    
/*$stmt->bindValue(1,$_POST['plz1'],PDO::PARAM_STR);
    $stmt->bindValue(2,$_POST['plz2'],PDO::PARAM_STR);
    $ok = $stmt->execute();*/
    
$ok $stmt->execute(array($_POST['plz1'], $_POST['plz2']));
    
$result $stmt->fetchAll(PDO::FETCH_ASSOC); ?>
    <pre><?php echo print_r($result);?></pre>
    <?php
    $error 
$conn->errorInfo();
    }
Hier noch der Nachweis, dass es klappt :
Array
(
[0] => Array
(
[plz] => 01217
[lon] => 13.74451633873620
[lat] => 51.01714374820780
[ex] => 0.61107378213590
[ey] => 0.14946681812031
[ez] => 0.77733422867330
[ort] => Dresden
)

[1] => Array
(
[plz] => 27442
[lon] => 9.02204851137085
[lat] => 53.38158486216570
[ex] => 0.58910322828882
[ey] => 0.09353718433403
[ez] => 0.80262580419928
[ort] => Gnarrenburg
)

)

Die Abfrage funktioniert natürlich auch unter Verwendung von bindValue() wie von PHP-Desaster vorgeschlagen. Der Unterschied von bindParam() und bindValue() ist mir dabei allerdings noch nicht ganz klar...Naja, ich bleibe sowieso erst mal bei meiner Lösung. Ich finde sie so schön knapp.

Morgen will ich mit meinen Fingerübungen weiter machen; Entfernungberechnungen einmal mit Hilfe der Polarkoordinaten und dann noch über das Skalarprodukt. Mal sehn, welcher Weg schneller ist. "Elisabeth" ist gerade raus , ich mach Feierabend und schau da mal rein.

Bis dann

lippes
Mit Zitat antworten
  #8 (permalink)  
Alt 26-01-2008, 19:27
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.104
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Jetzt sehe ich erst dein $conn->query() ^^. Hab das wohl verdrängt. Darum hatte ich auch keinen Fehler gesehen.
bindValue bindet einen Wert an das Statement, bindParam bindet hingegen eine Referenz auf eine Variable an das Statement. Änderst du vor dem Aufruf von execute den Wert in der Variablen, wird entsprechend der geänderte Wert übernommen. Ich meine, du kannst auch Variablen für die fetch-Methoden an das Statement binden.
__________________
iocstreamscanvas
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

MariaDB 5.5 veröffentlicht
MariaDB 5.5 veröffentlichtDie freie MySQL-Alternative MariaDB wurde in der stabilen Version 5.5.23 veröffentlicht und soll einige Verbesserungen gegenüber Oracles Communityversion von MySQL mitbringen.

16.04.2012 | Berni

Deutsche Yii Framework Community
Deutsche Yii Framework CommunitySeit dem 19.03.2012 gibt es für die Yii PHP Framework Community ein deutsches Zuhause.

20.03.2012 | dhcomputer

 

Aktuelle PHP Scripte

EM 2012 Tipp-Spiel ansehen EM 2012 Tipp-Spiel

Online Tipp-Spiel zur Fussball Europameisterschaft 2012, basierend auf php-Script mit hinterlegter mySql-Datenbank

27.05.2012 tippimnetz | Kategorie: PHP/ Spiele
Advanced Login ansehen Advanced Login

Login-System und Kundenverwaltung, die sich spielend leicht in bestehende Webseiten einbauen lässt und einen enormen Funktionsumfang bietet. Ihre eigene Webseite muss mit Advanced Login nicht umständlich an ein fertiges System angepasst werden.

25.05.2012 Madden | Kategorie: PHP/ Kundenverwaltung
BROM CMS/BelCal 3 ansehen BROM CMS/BelCal 3

Spezielles CMS für Betreiber von Ferienwohnungen. Komplette Seitenerstellung online, Verwaltung mehrerer Objekte, Reservierungssystem mit sofortigem Abgleich im Belegungskalender und vieles mehr bietet dieses Content Management System.

25.05.2012 belcal2 | Kategorie: PHP/ CMS
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:07 Uhr.