php - 一般如何在我的数据库中添加记录?
问题描述
我正在尝试将对象添加到数据库中,而不管对象中的属性如何。例如,我有这两个班级,每个班级都有自己的表格。
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 循环中,我试图绑定值,但这失败了。所以我的问题是如何将值绑定到准备好的语句。
解决方案
在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 更便携
推荐阅读
- c - 合并排序使用一些不在输入数组中的新元素给出错误的输出(在 C 中)
- mysql - 将一张表插入另一张表(来自不同的数据库)——MySQL
- json - 反应中href标签内的JSON值
- php - 检查 GeoLite2 是否有 IP 地址
- asp.net-core - 为什么nginx的reserve proxy upstream是一个静态网站,有很多TIME_WAIT?如何去爱
- xamarin.android - Xamarin Android 中的 LiveData
- c++ - c ++程序不打印并崩溃
- javascript - 钩子第一次没有设置状态
- firebase - Stripe/Firebase paymentIntent 未定义
- spring-boot - 无法从 Retrofit 回调返回 CompletableFuture.completedFuture