Prepared Statement - SELECT mit und ohne COUNT(*) funktioniert nur teilweise

Sebastian Wramba

Erfahrenes Mitglied
Hallo zusammen,

ich bastel grad an einer Adresssuchfunktion und gestalte das ganze mit Prepared Statements und PDO.

Nun habe ich eine Abfrage mit COUNT(*), die mir korrekt zurückliefert, wieviele Datensätze gefunden wurden. Die Abfrage danach ergibt leider nur "bool(false)".

Ich habs chon alles mögliche ausprobiert, aber nichts hilft wirklich. Die Abfrage hat ohne das COUNT(*)
Hier mal der Code:

PHP:
<?php
  
  // db connection
  include("db.inc.php");
  
  // complete statement
  $sql = "SELECT vorname,nachname,strasse,plz,ort,firma,web,mail FROM fachkraefte WHERE ";
  
  
  // add search terms to complete statement
  $prev = false;
  
  if($_POST['vorname'] != "") {
    $sql .= " vorname LIKE :vorname";
    $prev = true;
  }
  
  if($_POST['nachname'] != "") {
    if($prev) $sql .= " AND ";
    $sql .= " nachname LIKE :nachname";
    $prev = true;
  }
  
  if($_POST['strasse'] != "") {
    if($prev) $sql .= " AND ";
    $sql .= " strasse LIKE :strasse";
    $prev = true;
  }
  
   // usw. für alle Felder
  
  // statement for counting rows
  $sqlcount = str_replace("vorname,nachname,strasse,plz,ort,firma,web,mail", "COUNT(*)", $sql);
  
  // prepare count statement
  $queryc = $dbh->prepare($sqlcount);  
  if($_POST['vorname'] != "") $queryc->bindValue(':vorname', "%".$_POST['vorname']."%");
  if($_POST['nachname'] != "") $queryc->bindValue(':nachname', "%".$_POST['nachname']."%");
  if($_POST['strasse'] != "") $queryc->bindValue(':strasse', "%".$_POST['strasse']."%");
  if($_POST['plz'] != "") $queryc->bindValue(':plz', $_POST['plz']."%");
  if($_POST['ort'] != "") $queryc->bindValue(':ort', "%".$_POST['ort']."%");
  if($_POST['firma'] != "") $queryc->bindValue(':firma',"%".$_POST['firma']."%");
  $queryc->setFetchMode(PDO::FETCH_ASSOC);
  
  
  // save number of returned results
  $queryc->execute();
  $count = $queryc->fetchColumn();
  
  echo "<b>Treffer:</b> " . $count. "<br /><br />\n";
 
  if($count > 0) {
 
      // prepare complete statement   
      $query = $dbh->prepare($sql);
        
      // debug options
      echo "<b>SQL:</b> "; var_dump($sql); echo "<br /><br />\n";
      echo "<b>Query:</b> "; var_dump($query); echo "<br /><br />\n";
      echo  "<b>POST:</b> "; var_dump($_POST); echo "<br /><br />\n";

     // hier dann wieder die bindValues von oben, nur halt mit $query statt $queryc

?>

Output:

Treffer: 1

SQL: string(100) "SELECT vorname,nachname,strasse,plz,ort,firma,web,mail FROM fachkraefte WHERE vorname LIKE :vorname"

Query: bool(false)



Hat jemand ne Idee dazu, warum $query nicht funktioniert? Ich hab keine mehr. :confused:
 
Hab's jetzt klassisch mit mysql_connect, mysql_query und, mysql_num_rows gemacht. Funktioniert prima.

Und mit mysql_real_escape_string ist es auch noch sicher genug.
 
Zurück