微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MYSQLI/PHP 如何定义查询/语句以输出在特定聊天室中发送的每条消息?

如何解决MYSQLI/PHP 如何定义查询/语句以输出在特定聊天室中发送的每条消息?

我有一个名为 chatroomChoice.PHP页面,我将在 PMA 数据库中保存的所有聊天室输出为 ankers。如果我点击它,我会通过 GET 参数重定向到 chat.PHP 并且聊天室的名称被初始化为 GET 参数,如“index.PHP?page=chat&room=Nintendo”。所以我到达了 chat.PHP 或者更好的说“index.PHP?page=chat&room=Nintendo”,在那里我需要一次我的数据库配置文件(4 个常量保存到一个链接中)。然后我定义了一个名为 $sql 的变量,我在其中添加了我的查询。我的数据库中有三个表,tbluser、tblchatroom、tblsent。 tblsent 是一个关联表,它结合了聊天室的外键、用户的外键和用户在该特定聊天室发送的消息(看截图),另外两个表只包含基本信息,如聊天室的名称用户名。现在我想运行一个 SELECT 查询,它应该返回在该聊天室中发送的每条消息,包括发送该消息的人的用户名。我的查询目前看起来像这样 --> SELECT fiUser,dtMessage FROM ((tblsent INNER JOIN tblchatroom ON fiChatroom = idChatroom WHERE fiChatroom = ?) INNER JOIN tbluser ON fiUser = idUser)。是的,我使用准备好的语句,即使没有输入来保护。 在我使用该 MysqLi SELECT 查询设置 $sql 变量后,我对我的数据库链接变量(其中包含登录到 PMA 数据库的 4 个常量)和我的查询 aka $sql 进行了 MysqLi_prepare,我绑定了一个包含名称的变量当前聊天室通过 GET 参数收集到 $stmt 变量,我曾经使用 MysqLi prepare 启动该变量。然后我执行 $stmt,存储其结果,并使用 for 循环

for ( $f = 0 ; $f < MysqLi_num_rows ( $stmt ) ; $f++ ) {
    
    $row = MysqLi_fetch_assoc ( $stmt );        
    echo $row;          
}

$row 的回声是为了检查里面是否有东西。 但是即使我在数据库中设置了示例值,回显行也不包含任何内容

此处的 CHAT.PHP 代码

<form method="post">
    <div class="create">
        <div class="row">
            <div class="label">
                <label for="chat">Text chat</label>
            </div>
            <div class="text">
                <input type="text" name="Data_Chat" id="chat" maxlength="255">
            </div>
            <input type="submit" value="Chat senden" name="BUTTON_send" id="Chat">
        </div>
</form>

<?PHP
    
    if (isset($_SESSION["username"])) {
    
        require_once "includes/PHP/config.PHP";
        
        $_SESSION["chatroom"] = $_GET["rooms"];
        $param_chatroom = $_SESSION["chatroom"];
        $param_user = $_SESSION["username"];
        
        $sql = "SELECT fiUser,dtMessage FROM ((tblsent INNER JOIN tblchatroom ON fiChatroom = idChatroom WHERE fiChatroom = ?) INNER JOIN tbluser ON fiUser = idUser)";
        
        if ($stmt = MysqLi_prepare($link,$sql)) {
            
            // Bind variables to the prepared statement as parameters
            MysqLi_stmt_bind_param($stmt,"s",$param_chatroom);
            
            // Attempt to execute the prepared statement
            if (MysqLi_stmt_execute($stmt)) {
                
                // store result
                MysqLi_stmt_store_result($stmt);
                
                for ( $f = 0 ; $f < MysqLi_num_rows ( $stmt ) ; $f++ ) {
                    $row = MysqLi_fetch_assoc ( $stmt );
                    
                    echo $row;
                    
                }
                
            } else {
                
                echo "Oops! Something went wrong. Please try again later.<br>";
                echo MysqLi_errno($link) . " " . MysqLi_error($link) . "<br>";
                
            }
            
            // Close statement
            MysqLi_stmt_close($stmt);
            
        }
    
    } else {
        
        header("Location: index.PHP?page=login");
        
    }


?>

数据库看起来像:

-- PHPMyAdmin sql Dump
-- version 5.1.0
-- https://www.PHPmyadmin.net/
--
-- Host: 127.0.0.1
-- Erstellungszeit: 06. Jul 2021 um 22:08
-- Server-Version: 10.4.19-MariaDB
-- PHP-Version: 8.0.6

SET sql_mode = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHaraCTER_SET_CLIENT=@@CHaraCTER_SET_CLIENT */;
/*!40101 SET @OLD_CHaraCTER_SET_RESULTS=@@CHaraCTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Datenbank: `db_chat`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `tblchatroom`
--

CREATE TABLE `tblchatroom` (
  `idChatroom` int(3) NOT NULL,`dtName` varchar(25) NOT NULL,`dtChatIcon` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Daten für Tabelle `tblchatroom`
--

INSERT INTO `tblchatroom` (`idChatroom`,`dtName`,`dtChatIcon`) VALUES
(1,'Mario','https://img.icons8.com/bubbles/100/000000/super-mario.png'),(2,'luigi',(3,'Maki',(4,'lor','https://img.icons8.com/bubbles/100/000000/super-mario.png');

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `tblsent`
--

CREATE TABLE `tblsent` (
  `fiChatroom` int(3) NOT NULL,`fiUser` int(11) NOT NULL,`dtMessage` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Daten für Tabelle `tblsent`
--

INSERT INTO `tblsent` (`fiChatroom`,`fiUser`,`dtMessage`) VALUES
(1,19,'Hello World');

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `tbluser`
--

CREATE TABLE `tbluser` (
  `idUser` int(11) NOT NULL,`dtLastName` varchar(25) NOT NULL,`dtUserName` varchar(25) NOT NULL,`dtPasswordHash` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Daten für Tabelle `tbluser`
--

INSERT INTO `tbluser` (`idUser`,`dtLastName`,`dtUserName`,`dtPasswordHash`) VALUES
(19,'Nicolas','Scheer','Kreckelneckel','$2y$10$FWSPlpOK..LUMtoRDxTkgeqTKdzh/8sROUWB5dmntHiHAieCDDSV2');

--
-- Indizes der exportierten Tabellen
--

--
-- Indizes für die Tabelle `tblchatroom`
--
ALTER TABLE `tblchatroom`
  ADD PRIMARY KEY (`idChatroom`);

--
-- Indizes für die Tabelle `tblsent`
--
ALTER TABLE `tblsent`
  ADD KEY `Chatroom` (`fiChatroom`),ADD KEY `User` (`fiUser`);

--
-- Indizes für die Tabelle `tbluser`
--
ALTER TABLE `tbluser`
  ADD PRIMARY KEY (`idUser`);

--
-- AUTO_INCREMENT für exportierte Tabellen
--

--
-- AUTO_INCREMENT für Tabelle `tblchatroom`
--
ALTER TABLE `tblchatroom`
  MODIFY `idChatroom` int(3) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5;

--
-- AUTO_INCREMENT für Tabelle `tbluser`
--
ALTER TABLE `tbluser`
  MODIFY `idUser` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=23;

--
-- Constraints der exportierten Tabellen
--

--
-- Constraints der Tabelle `tblsent`
--
ALTER TABLE `tblsent`
  ADD CONSTRAINT `Chatroom` FOREIGN KEY (`fiChatroom`) REFERENCES `tblchatroom` (`idChatroom`),ADD CONSTRAINT `User` FOREIGN KEY (`fiUser`) REFERENCES `tbluser` (`idUser`);
COMMIT;

/*!40101 SET CHaraCTER_SET_CLIENT=@OLD_CHaraCTER_SET_CLIENT */;
/*!40101 SET CHaraCTER_SET_RESULTS=@OLD_CHaraCTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。