Bernd: num_rows

Hallo,

warum bekomme ich bei $count immer eine 0 obwohl Einträge vorhanden sind?

		$sql_Projekte = "
	
	SELECT pf_id, pf_bId, pf_pId, pf_eMail, pf_code, m_anrede, m_name, m_vorname, user_nickname
	FROM freigaben
	
  LEFT JOIN details ON details.m_code = freigaben.pf_eMail
	LEFT JOIN zugangsdaten ON zugangsdaten.user_code = freigaben.pf_eMail 

	WHERE pf_bId = ? ";

$statement_Projekte = $mysqli->prepare($sql_Projekte);
$statement_Projekte->bind_param('s', $veranstaltung);
$statement_Projekte->execute();

$result_Projekte = $statement_Projekte->get_result();

$count = $statement_Projekte->num_rows; 
  1. Tach!

    warum bekomme ich bei $count immer eine 0 obwohl Einträge vorhanden sind?

    $statement_Projekte = $mysqli->prepare($sql_Projekte);
    $statement_Projekte->bind_param('s', $veranstaltung);
    $statement_Projekte->execute();
    
    $result_Projekte = $statement_Projekte->get_result();
    
    $count = $statement_Projekte->num_rows; 
    

    Wenn du das Resultset als mysqli_result haben möchtest, wäre es auch sinnvoll, das dortige num_rows zu verwenden.

    num_rows kann - so wie es im PHP-Handbuch beschrieben steht - nur dann ein Ergebnis liefern, wenn das Resultset bereits clientseitig in einen Buffer geschrieben wurde. Wenn das num_rows von mysqli_result auch nicht will, dann wird sicher ein store_result() am mysqli_stmt-Objekt helfen.

    dedlfix.

    1. Hallo,

      wenn ich es so mache

      $statement_Projekte = $mysqli->prepare($sql_Projekte);
      $statement_Projekte->bind_param('s', $veranstaltung);
      $statement_Projekte->execute();
      $count = $statement_Projekte->store_result();
      
      $result_Projekte = $statement_Projekte->get_result();
      echo $count;
      

      Dann bekomme ich hier

      <?php while($result = $result_Projekte->fetch_object()) { }?>
      

      Einen Fehler

      Fatal error: Uncaught Error: Call to a member function fetch_object() on boolean

      Geht irgendwie alles nicht. Egal, ich lass es.

      1. So geht es

        $statement_Projekte = $mysqli->prepare($sql_Projekte);
        $statement_Projekte->bind_param('s', $veranstaltung);
        $statement_Projekte->execute();
        
        $result_Projekte = $statement_Projekte->get_result();
        
        $num_rows = mysqli_num_rows($result_Projekte);
        
        1. Tach!

          $result_Projekte = $statement_Projekte->get_result();
          $num_rows = mysqli_num_rows($result_Projekte);
          

          Ich würde nicht objektorientiert und prozedural ohne Not mischen. Ein mysqli_result-Objekt hat auch eine num_rows-Eigenschaft, die direkt ohne weiteren Funktionsaufruf befragt werden kann, also hier $result_Projekte->num_rows - hab ich ja auch in einer vorherigen Antwort erwähnt.

          dedlfix.

      2. Tach!

        wenn ich es so mache

        Mach es lieber gemäß der Beschreibung im Handbuch.

        $count = $statement_Projekte->store_result();
        

        store_result() liefert nicht num_rows, sondern ein boolean, das den Erfolgsstatus angibt.

        $result_Projekte = $statement_Projekte->get_result();
        echo $count;
        

        Dann bekomme ich hier

        <?php while($result = $result_Projekte->fetch_object()) { }?>
        

        Einen Fehler

        Fatal error: Uncaught Error: Call to a member function fetch_object() on boolean

        Und? Das hatten wir doch gerade nebenan, dass das ein Folgefehler ist, und PHP-Funktionen nicht nur das erwartete Ergebnis liefern, sondern auch ein false im Fehlerfall. Also erstmal schauen, wo das Boolean herkommt und dann im Handbuch lesen, was das für Ursachen haben kann.

        Schein wohl so, als ob store_result() nicht mit get_result() zusammenarbeiten kann.

        dedlfix.

      3. Hallo Bernd,

        wie oft haben wir Dir schon von Errorhandling erzählt?

        Wenn $result_Projekte ein boolean ist, dann hat get_result() FALSE geliefert. Das ist eine Fehlerbedingung, die man abfragen muss. Und wenn sie zutrifft, gibt es $mysqli->error bzw. $mysqli->errno, um den Fehler zu bestimmen.

        Das wäre dann vermutlich auch der Grund, warum num_rows den Wert 0 geliefert hat. Irgendwas geht bei der SQL Ausführung schief.

        Geht irgendwie alles nicht. Egal, ich lass es.

        Wenn Du so schlecht drauf bist, dann ist das vielleicht für heute die beste Idee. Geh zum Lommi und tank auf 😉. Ach nee, ist ja Fastenzeit. Egal. Tank trotzdem auf. Wie auch immer.

        Rolf

        --
        sumpsi - posui - clusi
        1. Hallo,

          das hat nichts mit einem schlechten Tag zu tun, auch wenn ich gerade total genervt bin. Aber stimmt, zum Lommi könnte ich tatsächlich mal wieder, da kann man sau gut essen.

          Ich habe das Zählen hierfür gebraucht

          <?php if ($num_rows != 0){ ?>
          				<?php while($result = $result_Projekte->fetch_object()) { ?>			
          			<div>
          				<p style="padding: 1em 0em 5px 0;"><strong><?php echo htmlspecialchars($result->p_titel) ?></strong></p>
          				<p style="padding: 0 0 5px 0; font-size: 0.9em">
          					<?php echo htmlspecialchars($result->p_von) ?>
          					<?php if ($result->p_von != $result->p_bis): ?>
          					 bis 
          					<?php echo htmlspecialchars($result->p_bis) ?>	
          					 <?php endif ?> 
          					</p>
          				<p style="padding: 0 0 5px 0; font-size: 0.9em"><a href="freigabe.php?projekt=<?php echo htmlspecialchars($result->pf_bId) ?>">Details zeigen</a></p>
          			</div>
          			<?php }  ?>	
          			<?php } else {
          				echo "Keine Daten vorhanden";
          			} ?>
          

          Ist ja nur eine Spiellerrei, hätte es nicht geklappt, wäre "keine Daten" einfach weg geblieben. Ist kein Weltuntergang.