在一个简单的网站上,我有一些文章存储在我的数据库中,每个文章都有一个按钮,按下该按钮时,会将读者引导到具有匹配内容的另一个网站。
我有两个类:在第一个类中,我连接到数据库并返回结果,在另一个类中,我读取数据库的内容。 现在,当 $_GET["eintrag"] 与每篇文章第一列的值匹配时,我只想读取数据库中的特定行,这样我就不必通读所有文章,这可能会减慢我的代码速度如果文章很多:
我想找到函数“leseArtikel()”内的单行,而不恢复数据库连接以及“Datanbank”类中的所有其他变量
<?php
class Datenbank {
public $connection;
public $query;
public $result;
public function __construct($servername, $dbusername, $dbpassword, $dbname) {
$this->connection = mysqli_connect($servername, $dbusername, $dbpassword);
mysqli_select_db($this->connection, $dbname);
}
public function getResult(){
$query = "SELECT * FROM protokoll_artikel";
$result = mysqli_query($this->connection,$query);
return $result;
}
public function close()
{
mysqli_close($this->connection);
}
}
class ProtokollEinträge{
public function leseAlleArtikel(){
$result = new Datenbank("localhost", "*******", "*******", "*******");
$result = $result->getResult();
if (mysqli_num_rows($result) > 0) {
// OUTPUT DATA OF EACH ROW
$row = array();
while($row = mysqli_fetch_assoc($result)) {
$weeks[$row["KW"]] = $row;
}
}
return $weeks;
}
public function leseArtikel($eintragsIds){
$item = new ProtokollEinträge();
$item = $item->leseAlleArtikel();
if (!isset($item[$eintragsIds])){
return false;
}
return $item[$eintragsIds];
}
} ?>
这是我想实现仅查找匹配行的代码:
$eintragsIds = $_GET["eintrag"];
$item = new ProtokollEinträge;
$item = $item->leseArtikel($eintragsIds);
// EIntrag existiert nicht
if ($item === false) {
echo nl2br("Dieser Artikel existiert nicht! \n
Bitte halten sie sich an die verlinkten Artikel auf der Startseite: \n")?>
<br><a href="https://djumla.dev/praktikum/protokoll.php">Startseite</a><?php
}
else {
?>
<div class="woche">
<h3><?php echo $item["KW"]; ?>:</h3> <h4><?php echo $item["TITEL"] ;?></h4><br>
<p><?php echo $item["INHALT"];?><br></p><p><?php echo $item["TEXT"];?><br></p>
<br><a href="https://djumla.dev/praktikum/protokoll.php">Zurück zur Startseite</a>
</div>
<?php }?>
</section>
</main>
<aside>
<section>
<div class="bild">
<img src="bilder/djumla.png"
class="avatar">
</div>
<h2>Kontakt</h2>
<p><img src="bilder/phone.png" width="30px" height="30px" > ********</p>
<p><img src="bilder/Vector.png" width="30px" height="20px"> ********</p>
<p><img src="bilder/map-pin.png" width="30px" height="30px"> ********</p>
</section>
我尝试使用
$query = "SELECT * FROM protokoll_artikel WHERE KW =" .$eintragsIds; ?>
哪里
$eintragsIds = $_GET["eintrag"]
public function leseArtikel($eintragsIds) {
$db = new Datenbank("localhost", "*******", "*******", "*******"); // Create single database connection
$query = "SELECT * FROM protokoll_artikel WHERE KW = ?"; // Prepared statement with placeholder
$stmt = mysqli_prepare($db->connection, $query); // Prepare the statement
mysqli_stmt_bind_param($stmt, "i", $eintragsIds); // Bind the parameter
mysqli_stmt_execute($stmt); // Execute the prepared statement
$result = mysqli_stmt_get_result($stmt); // Get the result
if (mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result); // Fetch the single row
return $row; // Return the single row as an associative array
} else {
return false; // Return false if no row is found
}
mysqli_stmt_close($stmt); // Close the prepared statement (recommended)
$db->close(); // Close the database connection (if needed)
}
在
Datenbank
中创建 leseArtikel
类的单个实例。这避免了每个呼叫的冗余连接。
$eintragsIds = $_GET["eintrag"];
$item = new ProtokollEinträge();
$artikel = $item->leseArtikel($eintragsIds);
if ($artikel === false) {
// ... handle non-existent article
} else {
// ... display article details using $artikel data
echo "KW: " . $artikel["KW"];
echo "TITEL: " . $artikel["TITEL"];
// ... and so on
}