Als u mysqli_stmt::$num_rows . wilt gebruiken (dat wil zeggen, controleer het aantal rijen op de voorbereide instructie), u moet $stmt->store_result() gebruiken na het uitvoeren van de voorbereide instructie voordat u het aantal rijen kunt controleren. Dat betekent dat het resultaat in het geheugen wordt opgeslagen voordat we controleren hoeveel rijen zijn geretourneerd.
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$stmt->store_result(); // Need to store the result into memory first
if ($stmt->num_rows) {
// ...
Als u echter mysqli_result::$num_rows . wilt gebruiken (op het MySQLi-resultaat dat u converteert van het resultaat van de instructie), moet u dat doen nadat u $result = $stmt->get_result(); hebt gedaan , en gebruik $result->num_rows; , zoals hieronder weergegeven.
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows) {
while ($row = $result->fetch_assoc()) {
// ....
Uiteindelijk zouden ze allebei hetzelfde moeten doen:geef een aantal van de rijen op die zijn geretourneerd door de oorspronkelijke voorbereide query.
Opmerking
Het is belangrijk op te merken dat u store_result() niet kunt gebruiken en get_result() op dezelfde verklaring. Wat betekent dat je in het eerste voorbeeld niet kunt converteren naar een mysqli-result-object (met behulp van get_result() , waarmee u de standaard fetch_assoc() . kunt gebruiken methode). Als store_result() slaat het resultaat op in het geheugen, er zijn niets voor get_result() om te zetten, en omgekeerd.
Dit betekent dat als u store_result() . gebruikt , moet u de instructie ophalen, mysqli_stmt::fetch() en bind de resultaten via mysqli_stmt::bind_result() . Als u get_result() . gebruikt , moet u het aantal rijen op het resulterende MySQLi-resultaatobject controleren (zoals weergegeven in het tweede voorbeeld).
U moet uw code daarom zo construeren dat u er maar één hoeft te gebruiken.
Dat gezegd hebbende, gebruik affected_rows zoals gesuggereerd in de opmerkingen, is niet de juiste tool voor de klus - volgens de handleiding op mysqli_stmt::$affected_rows (hetzelfde geldt voor een gewone zoekopdracht, mysqli::$affected_rows ):
- PHP.net op
mysqli_stmt::store_result() - PHP.net op
mysqli_stmt::get_result() - PHP.net op
mysqli_stmt::$num_rows