sql >> Databáze >  >> RDS >> Mysql

mysqli připravený příkaz num_rows vrátí 0, zatímco dotaz vrátí větší než 0

Když provedete příkaz přes mysqli, výsledky nejsou ve skutečnosti v PHP, dokud je nenačtete - výsledky jsou drženy jádrem DB. Takže mysqli_stmt objekt nemá žádný způsob, jak zjistit, kolik výsledků je bezprostředně po spuštění.

Upravte svůj kód takto:

$stmt->execute();
$stmt->store_result(); // pull results into PHP memory

// now you can check $stmt->num_rows;

Viz manuál

To se netýká vašeho konkrétního příkladu, ale pokud je vaše sada výsledků velká, $stmt->store_result() zabere hodně paměti. V tomto případě, pokud vás zajímá pouze zjištění, zda byl vrácen alespoň jeden výsledek, neukládejte výsledky; místo toho stačí zkontrolovat, zda metadata výsledku nejsou null:

$stmt->execute();
$hasResult = $stmt->result_metadata ? true : false;

Viz manuál



  1. Příklady CURRENT_TIMESTAMP – MySQL

  2. Načte poslední vloženou proceduru uloženou ve formuláři ID v MySQL

  3. MySQL:Potřebuji zobrazit od 1 do maximálně n příspěvků od každého uživatele za každý den

  4. zobrazit data z databáze do rozevíracího seznamu CodeIgniter