2012-04-13 4 views
0

Mein num_rows kommt zurück als 0, und ich habe versucht, es mehrere Möglichkeiten, aber ich bin festgefahren. Hier ist mein Code:num_rows ist 0, wenn es> 0 sein sollte für PHP mysqli code

$conn = new mysqli($dbserver, "dbuser", "dbpass", $dbname); 

    // get the data 
    $sql = 'SELECT AT.activityName, AT.createdOn 
      FROM userActivity UA, users U, activityType AT 
      WHERE U.userId = UA.userId 
      and AT.activityType = UA.activityType 
      and U.username = ? 
      order by AT.createdOn';    
    $stmt = $conn->stmt_init(); 
    $stmt->prepare($sql); 
    $stmt->bind_param('s', $requestedUsername); 
    $stmt->bind_result($activityName, $createdOn); 
    $stmt->execute(); 

    // display the data 
    $numrows = $stmt->num_rows; 
    $result=array("user activity report for: " . $requestedUsername . " with " . $numrows . " rows:"); 
    $result[]="Created On --- Activity Name"; 
    while ($stmt->fetch()) 
    { 
     $msg = " " . $createdOn . " --- " . $activityName . " "; 
     $result[] = $msg; 
    } 

    $stmt->close(); 

Es gibt mehrere Zeilen gefunden, und die Abrufschleife verarbeiten sie einfach gut. Irgendwelche Vorschläge dazu, wie ich die Anzahl der in der Abfrage zurückgegebenen Zeilen abrufen kann?

Vorschläge werden sehr geschätzt. Danke im Voraus.

Antwort

2

Sie müssen $stmt->store_result() zuerst anrufen, kurz vor $stmt->num_rows.

+0

perfekt. Vielen Dank. – jpporterVA

1

Versuchen Sie, dies vor dem Aufruf von num_rows; hinzuzufügen.

$stmt->store_result();

+1

Für den Datensatz habe ich Ihre Antwort nicht kopiert :) Vor, Ihre Antwort sagte etwas über den Aufruf von 'num_rows' als eine Methode anstelle eines Mitglieds. Dann hast du es bearbeitet, nachdem ich bereits geantwortet habe. Sei nicht beleidigt! – webbiedave

0

Ich weiß nicht, ob dies das Problem beheben, aber Sie können nicht bind_results bis nachexecute Sie die Abfrage, wenn ich mich nicht irre.

Auch Ihre while-Schleife:

while ($stmt->fetch()) 
{ 
    $msg = " " . $createdOn . " --- " . $activityName . " "; 
    $result[] = $msg; 
} 

Sie werden alle der $msg Variablen mit jeder Iteration der Schleife, mit Ausnahme der letzten Einstellung verlieren, weil Sie entweder brauchen $msg .= zu tun oder machen $msg ein Array $msg[] =