2014-09-19 57 views
2

我只是將我的數據庫從mysql遷移到postgresql。和我的代碼使用PDO。我已經搜索瞭如何使用PDO連接到postgresql並且它可以工作。但是我在調​​用fucntion來創建數據和讀取數據時遇到了麻煩。我經常在我的代碼中發現警報'無法創建數據'。無法在postgresql中插入和讀取數據pdo

但是當我調用搜索函數時,我的postgresql數據出來了。請幫我解決這個問題。

這裏是代碼:

class barang.php 

<?php 
class Barang 
{ 

    // database connection and table name 
    private $conn; 
    private $table_name = "barang"; 

    // object properties 
    public $id_barang; 
    public $nama_barang; 
    public $harga_satuan; 

    public function __construct($db){ 
     $this->conn = $db; 
    } 

    // create barang 
    function create(){ 

     // to get time-stamp for 'created' field 

     //write query 
     $query = "INSERT INTO 
        " . $this->table_name . " 

        id_barang = ?, nama_barang = ? , harga_satuan = ?"; 

     $stmt = $this->conn->prepare($query); 

     $stmt->bindParam(1, $this->id_barang); 
     $stmt->bindParam(2, $this->nama_barang); 
     $stmt->bindParam(3, $this->harga_satuan); 

     if($stmt->execute()){ 
      return true; 
     }else{ 
      return false; 
     } 

    } 

    // read products 
    function readAll($page, $from_record_num, $records_per_page) 
    { 

     $query = "SELECT 
        id_barang, nama_barang, harga_satuan 
       FROM 
        " . $this->table_name . " 
       ORDER BY 
        id_barang 
       LIMIT 
        {$from_record_num}, {$records_per_page}"; 

     $stmt = $this->conn->prepare($query); 
     $stmt->execute(); 

     return $stmt; 
    } 

    function Search() 
    { 

     $query = "SELECT 
        id_barang, nama_barang, harga_satuan 
       FROM 
        " . $this->table_name . " 
       WHERE 
        id_barang LIKE :search OR nama_barang LIKE :search "; 

     $stmt = $this->conn->prepare($query); 
     $search = $_GET['search']; 
     $stmt->bindValue(':search','%' . $search . '%', PDO::PARAM_STR); 
     $stmt->execute(); 

     return $stmt; 

    } 

} 
?> 

警報無法在此代碼創建數據捕獲:

$database = new Database(); 
$db = $database->getConnection(); 

// if the form was submitted 
if($_POST) 
{ 

    // instantiate barang object 
    include 'objects/barang.php'; 
    $barang = new Barang($db); 

    // set barang property values 
    $barang->id_barang = $_POST['id_barang']; 
    $barang->nama_barang = $_POST['nama_barang']; 
    $barang->harga_satuan = $_POST['harga_satuan']; 

    // create the barang 
    if($barang->create()){ 
     echo "<div class=\"alert alert-success alert-dismissable\">"; 
      echo "<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>"; 
      echo "Data barang was created."; 
     echo "</div>"; 
    } 

    // if unable to create the barang, tell the user 
    else{ 
     echo "<div class=\"alert alert-danger alert-dismissable\">"; 
      echo "<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>"; 
      echo "Unable to create barang."; 
     echo "</div>"; 
    } 
+0

請修復您的格式。 – andy 2014-09-19 17:51:59

回答

0

column=value系列insert語句不是標準SQL,它是MySQL特有的語法,這在PostgreSQL中不受支持。您應該使用ANSI-SQL的語法來代替:

$query = "INSERT INTO 
      " . $this->table_name . " 
      (id_barang, nama_barang , harga_satuan) VALUES (?, ?, ?)"; 

編輯:

limit條款MySQL使用也不是標準。在PostgreSQL中,syntax is slightly different

$query = "SELECT 
       id_barang, nama_barang, harga_satuan 
      FROM 
       " . $this->table_name . " 
      ORDER BY 
       id_barang 
      LIMIT 
       {$records_per_page}" 
      OFFSET 
       {$from_record_num}; 
+0

非常感謝。它現在起作用了,怎麼樣從數據庫中選擇數據?它仍然不起作用。也許有什麼方法可以用Postgresql在PDo上選擇數據?它會幫助我很多。謝謝:) – 2014-09-20 04:07:20

+0

@RahmiPrisalia看到我的編輯。 – Mureinik 2014-09-20 08:25:33

+0

謝謝你回答我的問題。我想我只是改變連接遷移dtabase,但聲明也應該改變,你有關於postgresql和pdo的參考?如果你有,請讓我知道。我想了解更多。 gbu :)。 – 2014-09-20 14:58:34