PDO脚本不工作可能是数据库或脚本错误


PDO Script Not Working Possible Database or Script Error

我制作了一个脚本,使用PDO从数据库中提取新闻帖子,但它无法正常工作。有人能检查我的文件,看看我做错了什么,并可能提出解决方案,解释为什么它不起作用,这样我就可以从错误中吸取教训。此外,如果你能让我知道我的代码是否容易被注入或其他漏洞,我将不胜感激

脚本:

<?php
require_once("config/config.php");
$dbh = new PDO('mysql:host='. DB_HOST .';dbname='. DB_NAME . ';charset=utf8', DB_USER, DB_PASS);
foreach($dbh->query("SELECT * FROM news ORDER BY id DESC",PDO::FETCH_ASSOC) as $row){
    $id = $row['id'];
    $title = $row['title'];
    $body = $row ['body'];
    $date = $row['date'];
    echo "<center><b>$title posted on $date</center></b><hr>";
    echo nl2br($body);
    echo "<hr>";
}
$dbh = null;
?>

config.php:

<?php 
define("DB_HOST", "localhost");
define("DB_NAME", "ninjaz_gaming");
define("DB_USER", "root");
define("DB_PASS", "Newman13");
?>

主要问题是您没有将PDO连接句柄存储在以后使用的变量中。

在你的代码中没有$this,我可以看到,没有类没有对象,因此这里是

$this->db_connection = new PDO(...);
^^^^ this what?

应该是

$dbh = new PDO(...);

除此之外,没有明显的错误。您还应该在生产时打开错误报告。

你也可以像这个一样简化你的代码

$dbh = new PDO(...);
foreach($dbh->query("SELECT * FROM news ORDER BY id DESC",PDO::FETCH_ASSOC) as $row){
    $id = $row['id'];
    $title = $row['title'];
    $body = $row ['body'];
    $date = $row['date'];
    echo "<center><b>$title posted on $date</center></b><hr>";
    echo nl2br($body);
    echo "<hr>";
}

由于您在查询中不使用任何用户提供的输入,就sql注入而言,这没有任何问题,但您迟早会在查询中使用用户提供的值,因此现在可以更进一步,使用准备好的语句。既然你已经在使用PDO了,那就不是什么大问题了。

connection.php

    <?php
define("DB_HOST", "localhost");
define("DB_NAME", "ninjaz_gaming");
define("DB_USER", "root");
define("DB_PASS", "Newman13");
function connectDb(){
    try {
        $db_connection = new PDO('mysql:host='. DB_HOST .';dbname='. DB_NAME . ';charset=utf8', DB_USER, DB_PASS);
        return $db_connection;
    } catch (PDOException $e) {
        echo "Sorry, there was a problem connecting to the database." . $e->getMessage();
    }
}
?>

编写脚本

<?php
        include('connection.php');
        $dbh = connectDb();
        $query = $dbh->prepare("SELECT * FROM news ORDER BY id DESC");
        $query->execute();

        while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
        {
            $id = $row['id'];
            $title = $row['title'];
            $body = $row ['body'];
            $date = $row['date'];
            echo "<center><b>$title posted on $date</center></b><hr>";
            echo nl2br($body);
            echo "<hr>";
        }
    ?>