首页 > 解决方案 > 一般如何在我的数据库中添加记录?

问题描述

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

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

标签: phpprepared-statement

解决方案


在http://php.net/manual/en/mysqli-stmt.bind-param.php检查 bind_param 的语法

不是 bind_param(index,var)

它的 bind_param(string of types, var1, var2, var3,...., Varn);

并使用 pdo 更便携


推荐阅读