首页 > 解决方案 > 使用 PHP 将 MySQL 嵌入到 HTML 超链接中

问题描述

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

<?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();
?>

标签: phpmysqlmysqli

解决方案


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

您可以在文件PHP顶部MySQLi使用以下行打开错误报告。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错误,你可以看这里

这是您的增强片段。

<?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 代码中的分号结尾。


推荐阅读