2016-04-07 139 views
0

我做了一個腳本,使用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"); 
?> 
+0

又有什麼問題? –

+0

你似乎沒有使用OOP,那麼爲什麼'$ this-> db_connection'?其後不要使用 –

回答

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,它不會成爲一個問題。

+0

然後你應該打開錯誤報告,看看實際的錯誤是在哪裏 –

0

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>"; 
     } 
    ?> 
+0

對不起,我沒有意識到沒有取得腳本^^我編輯它,請現在嘗試。 – D14n4