PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Fehler mit PDO::prepare() / non-object (http://www.selfphp.de/forum/showthread.php?t=24668)

phury 27.05.2012 15:46:52

Fehler mit PDO::prepare() / non-object
 
Liebe Community,

ich rätsel mittlerweile seit Stunden an folgendem Problem. Als Warnung vorab: Ich bin blutiger Anfänger in php. Also bitte nicht böse sein, wenns mal bisschen dauert ;)

PHP-Code:

<?php
  $suchbegriff 
$_GET["q1"] . '%';
  
$tabelle $_GET["q2"];
  
$feld $_GET["q3"];

  
$result NULL;
  
$sql "SELECT * FROM (?) WHERE (?) LIKE (?)";
  
$dbh = new PDO('sqlite:../db/db_schulung.sqlite');

  
$dbh->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_WARNING);

  
$query $dbh->prepare($sql);
  
$query->execute(array($tabelle$feld$suchbegriff));


  do{
      
$result $query->fetch(PDO::FETCH_ASSOC);
      if (
$result != NULL)
      
print_r ($result);

  } while (
$result != NULL);

  
$dbh null;
?>

Als Fehlerausgabe bekomme ich:
Warning: PDO::prepare() [pdo.prepare]: SQLSTATE[HY000]: General error: 1 near "?": syntax error in ...\livesearch.php on line 12
Fatal error: Call to a member function execute() on a non-object in ...\livesearch.php on line 13

Was mich stutzig macht ist, dass in vorherigen (ähnlichen) Versuchen das Ganze ohne weiteres geklappt hat.

vt1816 27.05.2012 16:31:15

AW: Fehler mit PDO::prepare() / non-object
 
Zitat:

Zitat von phury (Beitrag 143375)
Liebe Community,

Hallo und willkommen hier im Forum.


Zitat:

Zitat von phury (Beitrag 143375)
PHP-Code:

<?php
  $suchbegriff 
$_GET["q1"] . '%';
  
$tabelle $_GET["q2"];
  
$feld $_GET["q3"];

  
$result NULL;
  
$sql "SELECT * FROM (?) WHERE (?) LIKE (?)";
?>


Was soll "(?)" machen? Solltest Du dort nicht die entsprechend benötigten Werte einsetzten?

phury 27.05.2012 17:17:19

AW: Fehler mit PDO::prepare() / non-object
 
Zitat:

Hallo und willkommen hier im Forum.
Dankeschön ;)

Ja ... also die Fragezeichen stehen als Platzhalter für die 3 Werte,
die in der Methode execute als Parameter (zusammengefasst als array) übergeben werden.

Laut http://www.php.net/manual/de/pdostatement.execute.php (Bsp. 3) sollte das auch funktionieren.
(Die anderen Herangehensweisen habe ich schon mit gleichem Ergebnis ausprobiert.)

vt1816 27.05.2012 17:29:19

AW: Fehler mit PDO::prepare() / non-object
 
Zitat:

Zitat von phury (Beitrag 143375)
PHP-Code:

<?php
...
  
$dbh = new PDO('sqlite:../db/db_schulung.sqlite');

?>


Nur das Du PDO und nicht PDOStatment benutzt!

phury 27.05.2012 21:18:13

AW: Fehler mit PDO::prepare() / non-object
 
Hmm, viel hat mir das jetzt nicht geholfen.

Wie auch immer ...
Ich habe das Problem gelöst, indem ich
  • erstens das SQL-Statement mit den Parametern in einer Variable $sql abgelegt
  • und zweitens statt prepare() und execute() direkt query($sql) verwendet habe.

PHP-Code:

$sql "SELECT * FROM ".$tabelle." WHERE ".$feld." LIKE '".$suchbegriff."%'";
$menge $dbh->query($sql); 


meikel (†) 27.05.2012 21:22:40

AW: Fehler mit PDO::prepare() / non-object
 
Zitat:

Zitat von phury (Beitrag 143377)
Ja ... also die Fragezeichen stehen als Platzhalter für die 3 Werte,

Ja, aber seit wann wird der Tabellenbezeichner geklammert?

phury 27.05.2012 21:33:06

AW: Fehler mit PDO::prepare() / non-object
 
Zitat:

Ja, aber seit wann wird der Tabellenbezeichner geklammert?
Ich hatte das wohl in dem Versuch das Problem zu lösen irgendwo gesehen, ausprobiert und danach nicht mehr rückgängig gemacht.
Wo das war kann ich nicht mehr sagen. Ich dachte eben, dass das zu der "Ersetzung" gehört.

meikel (†) 27.05.2012 21:44:13

AW: Fehler mit PDO::prepare() / non-object
 
Zitat:

Zitat von phury (Beitrag 143382)
Ich hatte das wohl in dem Versuch das Problem zu lösen irgendwo gesehen, ausprobiert und danach nicht mehr rückgängig gemacht.
Wo das war kann ich nicht mehr sagen. Ich dachte eben, dass das zu der "Ersetzung" gehört.

Meine Frage betraf die Klammern um den Tabellennamen. MySQL erwartet dort einen literalen String und keinen Term.

btw: die Syntax bei LIKE sieht auch gewöhnungsbedürftig aus.

phury 27.05.2012 22:02:10

AW: Fehler mit PDO::prepare() / non-object
 
Klammern um welchen Tabellennamen?

Ich verwende keine MySQL- sondern eine SQLite-Datenbank. Ich nahm an, das sieht man wo die PDO-Instanz erzeugt wird.

Wieso sieht die Syntax bei LIKE gewöhnungsbedürftig aus? Die einfachen Hochkommata habe ich gesetzt um sicherzustellen, dass das % als Wildcard die Datenbank auch erreicht.

vt1816 27.05.2012 22:46:56

AW: Fehler mit PDO::prepare() / non-object
 
Zitat:

Zitat von phury (Beitrag 143380)
Hmm, viel hat mir das jetzt nicht geholfen.

Scheibar doch, denn darauf
Zitat:

Zitat von phury (Beitrag 143380)
...
Wie auch immer ...
Ich habe das Problem gelöst, indem ich
  • erstens das SQL-Statement mit den Parametern in einer Variable $sql abgelegt
  • ...

lief meine Hilfe hinaus.



Zitat:

Zitat von phury (Beitrag 143375)
[]
Als Warnung vorab: Ich bin blutiger Anfänger in php. Also bitte nicht böse sein, ...

Noch ein Hinweis: übernimm niemals ungeprüft $_GET/$_POST!


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:16:19 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.