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

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

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


 

Aktuelle PHP Scripte

EJS TreeGrid ansehen EJS TreeGrid

EJS TreeGrid is DHTML component written in pure JavaScript to display and edit data in table, grid, tree view or grid with tree on HTML page

09.04.2019 coqsoft@ | Kategorie: JAVASCRIPT/ Components
Suchmaschine redaktionell, Branchenportal zum Geld verdienen

Programmbeschreibung Die Bezahl-Suchmaschine ist in Perl und PHP programmiert (eigenes CGI-Verzeichnis notwendig), benötigt PHP aber keine MySQL-Datenbank. Webmaster haben mit dieser Suchmaschine neben der normalen kostenlosen Registrierung von Lin

06.04.2019 skripte@ | Kategorie: PHP/ Suchmaschinen
Oog Photo-Video-Gallery

Mit Oog Photo-Gallery können Sie einfach und stilvoll Bilder (auch Video & Audio) auf Ihrem PHP5-Webserver veröffentlichen und verwalten. Lizenz: GNU GPL v2

06.04.2019 trottbrand@ | Kategorie: PHP/ Bilder
 Alle PHP Scripte anzeigen

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