是否存在与PDO :: FETCH_CLASS等效的INSERT或UPDATE?

时间:2016-02-11 00:09:06

标签: php mysql class pdo sql-update

我发现PDO::FETCH_CLASS非常有用。我的类映射到表。我只是做了一个

$query = $pdo->query("SELECT * FROM fixedTime WHERE
                  transmissionProgramID = '$transmissionProgramID'");
$query->setFetchMode(PDO::FETCH_CLASS, 'FixedTime');

瞧。

我希望能够做相反的事情:即实例化一个对象将值加载到UPDATE或INSERT再次瞧瞧。

看了但看不出这是否可用。

1 个答案:

答案 0 :(得分:0)

嗯,是的。在某种程度上,您可以使用类似的插入或更新。

但要实现这一目标,你必须学习how to use PDO properly。所以,首先我们必须修复您的选择代码:

$sql = "SELECT * FROM fixedTime WHERE transmissionProgramID = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$transmissionProgramID]);
$stmt->setFetchMode(PDO::FETCH_CLASS, 'FixedTime');
$ftime = $stmt->fetch();

请参阅 - 我们在这里使用预备语句,您应该始终使用。同时,这是[半]自动化的关键,我们可以使用更新。因为使用预准备语句,您可以使用对象本身为准备好的查询提供值。

因此,只要您有对象属性反映表字段,就可以使用如下代码:

$user = new stdClass();
$user->name = "foo";
$user->pass = "bar";

$sql = "INSERT INTO users VALUES (NULL, :name, :pass)";
$pdo->prepare($sql)->execute((array)$user);

但是对于真正的自动化,您必须考虑使用 ORM ,这正是您正在寻找的。例如,您可以查看Eloquent。因此,代码将像

一样简单明了
$ftime = new fixedTime;
$ftime->value = time();
$ftime->save();