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