一般如何在我的数据库中添加记录?
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 更便携
我正在尝试将对象添加到数据库,而不管对象中的属性如何。例如我有这两个 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 更便携