2016-04-07 1 views
0

Я создал сценарий, который выводит сообщения новостей из моей базы данных с использованием PDO, однако он не работает должным образом. Может ли кто-нибудь проверить мои файлы, чтобы увидеть, что я делаю неправильно, и, возможно, предложить исправить и объяснить, почему он не работает, поэтому я могу учиться на своих ошибках. Также, если вы сообщите мне, если мой код подвержен инъекциям или другим уязвимостям, я был бы признателен.PDO Script Not Working Возможная ошибка базы данных или скрипта

Сценарий:

<?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

Вы, кажется, не используете ООП, так зачем «$ 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 Injection обеспокоен, но рано или поздно вы будете иметь использовать пользовательские значения в запросах и, следовательно, вы можете сделать еще один шаг вперед и использовать подготовленные операторы. Поскольку вы используете 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(); 
    } 
} 
?> 

Script

<?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