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

时间:2018-10-06 09:55:34

标签: php prepared-statement

我试图将一个对象添加到数据库中,而不管该对象中的属性如何。例如,我有这两个类,每个类都在自己的表中。

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循环中,我试图绑定该值,但这失败。所以我的问题是如何将值绑定到准备好的语句。

2 个答案:

答案 0 :(得分:2)

library上检查bind_param的语法

不是bind_param(index,var)

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

并使用pdo更加便携

答案 1 :(得分:-1)

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