根据查询名称仅读取数据库的特定行

问题描述 投票:0回答:1

在一个简单的网站上,我有一些文章存储在我的数据库中,每个文章都有一个按钮,按下该按钮时,会将读者引导到具有匹配内容的另一个网站。

我有两个类:在第一个类中,我连接到数据库并返回结果,在另一个类中,我读取数据库的内容。 现在,当 $_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"]

php sql mysqli
1个回答
-1
投票
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
}
© www.soinside.com 2019 - 2024. All rights reserved.