mysql php中表的大小

mysql php中表的大小,php,mysql,Php,Mysql,我有一个table calle users\u会话,我希望它只能容纳8行。我正在尝试实现我的代码,以便如果行数为8,则不添加用户,但如果行数较少,则添加用户。问题在于,while循环之后的代码(而不是内部的代码)似乎不起作用 基本上,我想尝试实现的是,用户已经在游戏中被允许的表中,如果他不在,并且表已满,则会显示一条消息,表示已满,如果用户不在表中,但未满,则会将其添加到表中 谢谢,希望有人能帮助我 <?php session_start(); $member_id = $_SESSION

我有一个table calle users\u会话,我希望它只能容纳8行。我正在尝试实现我的代码,以便如果行数为8,则不添加用户,但如果行数较少,则添加用户。问题在于,while循环之后的代码(而不是内部的代码)似乎不起作用

基本上,我想尝试实现的是,用户已经在游戏中被允许的表中,如果他不在,并且表已满,则会显示一条消息,表示已满,如果用户不在表中,但未满,则会将其添加到表中

谢谢,希望有人能帮助我

<?php session_start();
$member_id = $_SESSION['member'];

// establishing connection to the database

require ('database_connection.php');

$my_database = mysql_select_db("roulette") or die("Database wasn't found!");

// counting the number of rows in the users_session table

$count_rows = "SELECT * FROM users_session";
$count_rows_query = mysql_query($count_rows) or die("<p> <font face=verdana> selecting rows failed!</p>");
$number_of_rows = mysql_num_rows($count_rows_query) or die("<p> <font face=verdana> Counting rows failed!</p>");

// getting the contents of the table users_session

$query = "SELECT * FROM  users_session";
$select_query = mysql_query($query) or die("<p> <font face=verdana> Fetching rows failed!</p>");
$isAlready = false;

// fetch and check every row in the table

while ($rows = mysql_fetch_array($select_query))
    {

    // if the user is already inside the session

    if ($member_id == $rows['member_id'])
        {
        $isAlready = true;
        print "<script> alert('You are already listed in the session') </script>";
        include ('one_number_bet.php');

        }
      else
        {
        $isAlready = false; //user is not in the session
        }
    }

print "test";
print $number_of_rows;

// if user is not in the session

if ($isAlready = true)
    {

    // checking if the table is full

    if ($number_of_rows < 8)
        {
        print "<script> alert('The session is full, please try again later') </script>";
        include ("type_of_bet.php");

        }

    // table is not full

      else
        {

        // add the user in the session

        $query = "INSERT INTO users_session (member_id) VALUES ('$member_id');";
        $insert_query = mysql_query($query) or die("<p> <font face=verdana> Insertion failed!</p>");
        print "<script> alert('You have been successfully added to the session') </script>";
        include ("one_number_bet.php");

        }
    }

?>

要知道表中的行数,只需执行以下查询:

SELECT count(*) FROM your_table
在PHP中,您需要执行以下操作:

$res = mysql_query("SELECT count(*) FROM your_table");
$nb = mysql_result($res, 0);

循环外的代码不起作用的原因是,当变量在循环外时,您检查的变量永远都是假的。在循环内部,它变为true,但该true变量不会跳出循环。将所有IF语句放入While循环,或将$isAlready变量放入$\u会话变量,以便在循环外部使用。

以下是一个可以帮助您识别活动会话和用户的查询

由于我不喜欢发布未经测试的代码,并且a不会使用“mysql_*例程”,所以我将其转换为“mysqli”

更改“newActiveUser”变量以查看新结果

它经过测试

<?php

/*
 * return useful information about active users:
 *
 * 1) active_sessions_count => number of active 'admin' users
 * 2) known_user_was_found  => whether the username is is known
 * 3) active_user_was_found => where the supplied user name is active
 *
 */
// connection
$db = new mysqli('localhost', 'test', 'test', 'testmysql');

$newActiveUser = 'user9';

// makes the query easier to read and maintain - no other reason
$activeUsersSql = <<<'EOD'
SELECT COUNT(*) AS active_sessions_count,
       known_user_was_found,
       active_user_was_found

FROM user_session,

     (SELECT COUNT(users.username) AS known_user_was_found
      FROM users
      WHERE users.username = ?) AS known_user,

     (SELECT COUNT(user_session.username) AS active_user_was_found
      FROM user_session
      WHERE user_session.username = ?) AS active_user
EOD;
// end of query

$query = $db->prepare($activeUsersSql);

if  ($db->errno) {
    echo '<br/>prepare error: ', $db->errno, ' : ', $db->error, '<br/>';
}

// bind input params
$query->bind_param('ss', $newActiveUser, $newActiveUser);

if(!$query->execute()) {
    echo '', $db->errno, ' : ', $db->error, '<br/>';
}

// get the results
$results = $query->get_result();
if ($db->errno) {
    echo '<br/>results error: ', $db->errno, ' : ', $db->error, '<br/>';
}

$row =  $results->fetch_assoc();

// show results 
var_dump($row);
活动会话:

username  
----------
user1     
user2     
user3     
user4     
user5     
user6     
user7     
user8     

对不起,我可能没有回答这个问题?另外,为什么要调用同一个查询两次?有一个名为num_rows的数组属性可用于此操作。他们会告诉你停止使用mysql函数,转而使用mysqli或PDO。一旦你有了结果,你可以在上面调用fetch_assoc,不需要循环,然后执行if$rows->num_rows<9对不起,我不明白,因为这是我第一次使用php和mysql,我正在通过互联网学习。您所说的函数不是我正在使用的mysql\u num\u rows$count\u rows\u查询,它返回行数。但是如果我删除了循环,那不就好像只获取第一行吗?谢谢你的回复什么是?在我的代码中的问题是我必须检查用户是否已经在表中列出。我得到行数的那部分还可以,因为我意识到函数mysql_num_rows返回一个字符串,我相应地修改了代码。我不明白的是如何实现不同的if语句,以确保:-如果用户在表中,他将被带到另一个页面-如果用户不在表中,并且表已满,他将被拒绝访问-如果表未满,并且有用户希望访问,他将被添加到php中的表中,则查询无法工作返回资源5,我不知道它是什么
username  
----------
user1     
user2     
user3     
user4     
user5     
user6     
user7     
user8