Pokud chcete použít mysqli_stmt::$num_rows
(to znamená zkontrolovat počet řádků na připraveném výpisu), musíte použít $stmt->store_result()
po provedení připraveného příkazu, než bude možné zkontrolovat počet řádků. To znamená, že výsledek se uloží do paměti, než zkontrolujeme, kolik řádků bylo vráceno.
$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) {
// ...
Pokud však chcete použít mysqli_result::$num_rows
(na výsledku MySQLi, který převedete z výsledku příkazu), to musíte udělat po provedení $result = $stmt->get_result();
a použijte $result->num_rows;
, jak je znázorněno níže.
$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()) {
// ....
Nakonec by oba měli udělat totéž – poskytnout počet řádků vrácených původně připraveným dotazem.
Poznámka
Je důležité si uvědomit, že nemůžete použít store_result()
a get_result()
na stejném prohlášení. Což znamená, že v prvním příkladu nemůžete převést na objekt mysqli-result (pomocí get_result()
, který vám umožňuje použít standardní fetch_assoc()
metoda). Jako store_result()
uloží výsledek do paměti, není zde nic pro get_result()
převádět a naopak.
To znamená, že pokud použijete store_result()
, musíte načíst pomocí příkazu-fetch, mysqli_stmt::fetch()
a svázat výsledky pomocí mysqli_stmt::bind_result()
. Pokud použijete get_result()
, měli byste zkontrolovat počet řádků na výsledném objektu MySQLi-result (jak ukazuje druhý příklad).
Měli byste proto sestavit svůj kód tak, že potřebujete použít pouze jeden z nich.
Jak již bylo řečeno, pomocí affected_rows
jak bylo navrženo v komentářích, není to správný nástroj pro tuto práci - podle manuálu na mysqli_stmt::$affected_rows
(totéž platí pro běžný dotaz, mysqli::$affected_rows
):
- PHP.net na
mysqli_stmt::store_result()
- PHP.net na
mysqli_stmt::get_result()
- PHP.net na
mysqli_stmt::$num_rows