问题描述
我有一个名为 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
的回声是为了检查里面是否有东西。
但是即使我在数据库中设置了示例值,回显行也不包含任何内容。
<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 (将#修改为@)