[英]SQLite3 count rows
我正在嘗試計算查詢返回的行數
這是我現在的代碼
function products()
{
$loggedin = loggedin();
$db = db();
$stmt = $db->prepare('SELECT game_id, name, developer, price FROM game WHERE quantity > 0 ORDER BY game_id DESC');
$result = $stmt->execute();
$row1 = $result->fetchArray();
$rows = count ($row1);
if ($rows == 0)
{
echo "Sold out";
}
else
{
while ($row = $result->fetchArray()) {
echo '<p>'.$row['name'].'</p>';
}
}
}
目前,即使所有行都匹配,它也只會返回表中的第一項
如果我將代碼更改為
function products()
{
$loggedin = loggedin();
#$page = 'index.php';
$db = db();
$stmt = $db->prepare('SELECT game_id, name, developer, price FROM game WHERE quantity > 11 ORDER BY game_id DESC');
$result = $stmt->execute();
while ($row = $result->fetchArray()) {
echo '<p>'.$row['name'].'</p>';
}
然后我從表中正確獲得所有結果
如果我將查詢更改為超出數量的值,例如
quantity > 20
然后我得到了錯誤
Warning: count(): Parameter must be an array or an object that implements Countable
我想做的是,如果row1 == 0,則該節目售罄,否則將顯示所有行
因此,如果某行與查詢不匹配,則該行將不包含在結果中,我無法使用PDO,並且無法在https://www.php.net/manual/en/上找到要使用的計數book.sqlite3.php
那應該做。
function products() {
$loggedin = loggedin();
$db = db();
$games = $db->query('SELECT game_id, name, developer, price FROM game WHERE quantity > 0 ORDER BY game_id DESC');
if (empty($games->fetchArray())) {
echo "Sold out";
return;
}
// Reset the result back to the first game
$games->reset();
while ($game = $games->fetchArray(SQLITE3_ASSOC)) {
echo '<p>'.$game['name'].'</p>';
}
}
我會做類似的事情:
function products() {
$db = db();
$stmt = $db->prepare('SELECT game_id, name, developer, price FROM game WHERE quantity > 0 ORDER BY game_id DESC');
$result = $stmt->execute();
$count = 0;
while ($row = $result->fetchArray()) {
echo '<p>'.$row['name'].'</p>';
$count++;
}
if ($count == 0) {
echo "<p>Sold out</p>";
}
}
找出查詢返回多少行的唯一方法是獲取所有這些行(您實際上並不關心返回的行數,只是至少返回了一行)。 因此,只需為返回的每一行增加一個計數器,然后逐步瀏覽所有行,如果該計數器仍為0,則表示沒有返回任何行,您可以顯示相關的消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.