Om du vill använda mysqli_stmt::$num_rows
(det vill säga kontrollera antalet rader på det förberedda uttalandet), du måste använda $stmt->store_result()
efter att ha kört den förberedda satsen innan man kan kontrollera antalet rader. Det betyder att resultatet lagras i minnet innan vi kontrollerar hur många rader som returnerades.
$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) {
// ...
Men om du vill använda mysqli_result::$num_rows
(på MySQLi-resultatet konverterar du från satsresultatet), måste du göra det efter att ha gjort $result = $stmt->get_result();
, och använd $result->num_rows;
, som visas nedan.
$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()) {
// ....
I slutändan bör de båda sluta göra samma sak - ange ett antal av raderna som returneras av den ursprungliga förberedda frågan.
Obs
Det är viktigt att notera att du inte kan använda store_result()
och get_result()
på samma uttalande. Vilket betyder att i det första exemplet kan du inte konvertera till ett mysqli-result-objekt (genom att använda get_result()
, som låter dig använda standarden fetch_assoc()
metod). Som store_result()
lagrar resultatet i minnet, det finns inget för get_result()
att konvertera och vice versa.
Detta betyder att om du använder store_result()
, måste du hämta genom statement-fetch, mysqli_stmt::fetch()
och binda resultaten genom mysqli_stmt::bind_result()
. Om du använder get_result()
, bör du kontrollera antalet rader på det resulterande MySQLi-result-objektet (som visas i det andra exemplet).
Du bör därför konstruera din kod så att du bara behöver använda en av dem.
Som sagt, med affected_rows
som föreslås i kommentarerna, är inte rätt verktyg för jobbet - enligt manualen på mysqli_stmt::$affected_rows
(samma sak gäller för en vanlig fråga, mysqli::$affected_rows
):
- PHP.net på
mysqli_stmt::store_result()
- PHP.net på
mysqli_stmt::get_result()
- PHP.net på
mysqli_stmt::$num_rows