一般如何在我的数据库中添加记录?

How can I add records in my database generically?

我正在尝试将对象添加到数据库,而不管对象中的属性如何。例如我有这两个 class,每个都有自己的 table。

class Movie { 
    public $Id;
    public $Name;
    public $PegiRating;
    public $Length;
}

 class Location {
    public $Id;
    public $Street;
    public $HouseNumber;
    public $City;
    public $PostalCode;
    public $Telephone;
    public $Email;
}

问题是这必须在准备好的语句中。我已经设法得到正确的 sql 查询,但我没能得到值。

这是我目前拥有的:

public static function addRecord($tableName, $object)
{
    //Creates an array of the object and removes the Id.
    $object = (Array)$object;
    unset($object["Id"]);

    //Initializing variables
    $columnNames = Array();
    $values = Array();
    $amountOfQuestionmarks = 0;
    $columns = "";
    $questionmarks = "";

    //Setting variables
    foreach ($object as $column => $value) {
        $amountOfQuestionmarks++;
        array_push($values, $value);
        array_push($columnNames, $column);
    }

    //Setting the strings
    for($i=0;$i <$amountOfQuestionmarks;$i++){
        $columns .= $i != 0? ", $columnNames[$i]" : $columnNames[$i];
        $questionmarks .= $i != 0? ", ?" : "?";
    }

    $sql = "INSERT INTO $tableName ($columns) VALUES ($questionmarks)";

    $db = Db::getConnection();
    $stmt = $db->prepare($sql);

    for($i = 0; $i < $amountOfQuestionmarks;$i++){
        $stmt->bind_param($i+1, $values[$i]);
    }

    $stmt->execute();
    $stmt->close();
    $db->close();
}

在最后一个for循环中,我试图绑定值,但是失败了。所以我的问题是如何将值绑定到准备好的语句。

它失败了,因为你需要使用 bindParam 而不是 bind_param。否则它工作正常。

http://php.net/manual/en/mysqli-stmt.bind-param.php

检查 bind_param 的语法

不是bind_param(index,var)

它的 bind_param(类型字符串,var1, var2, var3,...., Varn);

并且使用 pdo 更便携