我正在编写一个使用 PDO 的应用程序。我有一个定义 id 属性的模型抽象类。我创建了一个类,它使用每个数据模式独有的属性和方法来扩展每个对象模型的抽象,并使用 PDO fetchObject 从数据库中获取对象。如果 id 为 NULL,我知道它没有被保存。我有一个函数一直有效,直到我尝试将序列化对象作为属性传递。当序列化对象的属性包含单引号时,就会出现问题。(例如 Mike's Hard Lemonade)这是位于模态抽象类中的函数:
public function save(DatabaseConnection &$db)
{
$properties = get_object_vars($this);
$table = $this->getTableName();
foreach ($properties as $key => $value) {
$cols[] = "`$key`";
$values[] = "'".$value."'";
if ($value != NULL) {
$updateCols[] = "`$key`".' = "'.$value.'"';
}
}
$sql = 'INSERT INTO '.$table.' ('.implode(", ", $cols).') VALUES ('.implode(", ", $values).') ON DUPLICATE KEY UPDATE '.implode(", ", $updateCols);
var_dump($sql);
$stmnt = $db->prepare($sql);
return $stmnt->execute($values);
}