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