2016-04-07 20 views
0

Veritabanı gönderimlerini PDO kullanarak veritabanımdan çeken bir komut dosyası hazırladım, ancak düzgün çalışmıyor. Ne yaptığımı görmek için dosyalarımı kontrol edebilen biri olabilir ve muhtemelen bir düzeltme önerebilir ve neden çalışmıyor olduğunu açıklar, böylece hatalarımdan öğrenebilirim. Ayrıca eğer kodumun enjeksiyona veya diğer zayıf noktalara eğilimli olup olmadığını bana bildirirseniz, bunu takdir ediyorum.PDO Komutu Çalışmıyor Olası Veritabanı veya Komut Dosyası Hatası

Senaryo:

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

Ve mesele nedir? –

+0

OOP kullanıyor gibi görünmüyorsun, bu yüzden neden $ this-> db_connection'? Ve daha sonra kullanılmıyorsa ya –

cevap

0

İlköğretim sorunu da yolda kullanmak bir değişkene PDO bağlantı kolu depolamak olmamasıdır.

Görebildiğim kodunuzda hiçbir $this yoktur, hiçbir sınıfları dolayısıyla burada

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

hiçbir nesne Hiçbir belirgin hata olmadığını daha

$dbh = new PDO(...); 

Diğer olmalıdır. Ayrıca üretim sırasında hata raporlamasını da açmalısınız.

kadarıyla sql enjeksiyon söz konusu olduğunda hiçbir sorunları vardır Sorgunuzda herhangi bir kullanıcı sağlanan girişi kullanılmadığından da bu

$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>"; 
} 

gibi kodunuzu basitleştirmek, ama er ya da geç olacak sorgularda kullanıcı tarafından sağlanan değerleri kullanmak ve bundan dolayı şimdi 1 adım daha ileri gidebilir ve hazırlanmış ifadeleri kullanabilirsiniz. PDO'yu zaten kullandığınız için bir sorun olmayacak.

+0

Sonra gerçek hata nerede olduğunu görmek için hata bildirimi açmalısınız –

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

Senaryo

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

Üzgünüm Ben betik alma getirdi farkında değildim^^ Düzenledim, lütfen şimdi deneyin. – D14n4

İlgili konular