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.105
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.
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.105
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?
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.105
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.
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

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

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