使用 PHP 将 MySQL 嵌入到 HTML 超链接中

Embedding MySQL into HTML hyperlink using PHP

我对 Web 开发和从头开始自学还很陌生。 我正在 运行 通过一些练习来自学并熟悉 PHP 和 MySQL 作为语言,并以一个简单的糖果店为例。我想制作一个页面,其中仅列出我的糖果名称和指向新页面的超链接,该页面会告诉您更多信息。我从头开始编写了以下代码,在我的脑海中它是有道理的,但其中一定隐藏了一个错误。如果有人能发现我的错误,我将不胜感激 and/or 提供任何关于将来要注意什么的提示。谢谢!

<?php //sweetshop.php
    require_once 'login.php';
    $conn = new mysqli($hn, $un, $pw, $db);
    if ($conn->connect_error) die("Error Sweetshop.");
    
    $query = "SELECT * FROM products";
    $result = $conn->query($query);
    if (!$result) die("Fatal Error");
    
    $rows = $result->num_rows;
    
    for ($j = 0; $j < $rows; ++$j)
    {
        $row = $result->fetch_array(MYSQLI_ASSOC);
        
        ?><a href="product?product_id=<?php echo htmlspecialchars($row['product_id'])?>"><?php echo htmlspecialchars($row['sweet'])?></a><br/><?
    }
    
    $result->close();
    $conn->close();
?>

我只是在您的代码段中添加了易于使用的提取和打印选项,并且它可以正常工作。此外,使用 dietry/catch 来处理您的 MySQLiPHP 错误很难理解那里到底发生了什么。因此,在开发项目时,配置 PHPMySQLi 报告错误是必不可少的。

您可以在 PHPMySQLi 中使用以下行打开错误报告,位于 PHP 文件的顶部。

ini_set('display_errors', 1);
error_reporting(E_ALL);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

这些行打印所有错误,例如; Uncaught mysqli_sql_exception: Table 'tevrakdb.prod5uct' doesn't exist in /var/..Fatal error: Uncaught mysqli_sql_exception: Access denied for user 'randomuser'@...。为了更好地理解 PHPMYSQL 错误,您可以查看 here.

这是您的增强代码段。

<?php 
    require_once 'login.php';

    ini_set('display_errors', 1); //display errors on the screen
    error_reporting(E_ALL); // All errors and warning
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); //Report errors and warnings from mysqli function calls

    $conn   = new mysqli($hn, $un, $pw, $db);
    $query  = "SELECT * FROM products";

    $result = $conn->query($query);

    if ($result->num_rows > 0) {
      while($row = $result->fetch_assoc()) { ?>
        <a href="product?product_id=<?php echo htmlspecialchars($row['product_id']); ?>">
            <?php echo htmlspecialchars($row['product_name_lang_1']); ?>        
        </a><br/>
        <?php
      }
    }

    $result->close();
    $conn->close();
?>

顺便说一下,我建议不要忘记内联 php 代码行的分号结尾。