php - 无法在postgresql pdo中插入和读取数据

标签 php postgresql pdo

我刚刚将我的数据库从 mysql 迁移到 postgresql。和我使用 PDO 的代码。我已经搜索过如何使用 PDO 连接到 postgresql 并且它有效。但是当调用函数创建数据和读取数据时我遇到了麻烦。我总是在我的代码中遇到“无法创建数据”的警报。

但是当我调用搜索功能时,我的 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>";
    }

最佳答案

column=value 系列的插入语句不是标准 SQL,它是 MySQL 特定的语法,PostgreSQL 不支持它。您应该改用 ANSI-SQL 语法:

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

编辑:

MySQL 使用的 limit 子句也不是标准的。在 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};

关于php - 无法在postgresql pdo中插入和读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25939646/

相关文章:

php mysql 如果总和不起作用

php - 如何在 PHP for MySQL 中获取数组外部的变量?

php - PostGreSQL 使用 PDO PHP 创建表

PHP Fetchall 只返回列标题

php - 从 php 获取 JSON 编码的变量

javascript - 在 PHP 循环中使用 javascript onclick

mysql - 数据库设计:喜欢的表格?

sql - 计算一个值在不同列中出现的次数

sql - 慢计数postgresql

php - 如何更正存储过程错误#1934? (SQL 服务器/PHP)