PDO脚本无法运行可能的数据库或脚本错误

时间:2016-04-07 08:02:21

标签: php pdo

我制作了一个脚本,使用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");
?>

2 个答案:

答案 0 :(得分:0)

主要问题是您没有将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,因此不会出现问题。

答案 1 :(得分:0)

connection.php

False

脚本

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