【发布时间】:2010-02-05 00:37:07
【问题描述】:
这是我对 Kohana 3 的更新方法。
public function update($type, $id, $updates) {
$info = $this->getInfo($type);
$dbTable = $info['table'];
$updatesKeysToValues = array();
var_dump($updates);
foreach($updates as $key => $value) {
// if the value is null or the key isnt set for this, don't update!
if ($value === null OR ! isset($info['columnsToUpdateData'][$key])) continue;
$updatesKeyToValues[] = "`$key` = :$key";
}
$updatesKeyToValues = implode(', ', $updatesKeyToValues);
$query = 'UPDATE `' . $dbTable . '` SET ' . $updatesKeyToValues . ' WHERE id = :id LIMIT 1' ;
echo $query;
$dbQuery = DB::query(Database::UPDATE, $query);
foreach($updates as $key => $value) {
echo "$key === $value\n<br>";
$dbQuery->bind(':' . $key, $value);
}
$success = $dbQuery->bind(':id', $id)
->execute();
var_dump($success);
}
在每个var_dump() 和echo 期间,数据都很好。没有任何迹象表明为什么会发生这种情况。
基本上我正在做的是从配置中获取该表的数据,使用命名参数构建查询字符串,循环并定义命名参数,然后执行。我最终没有工作,而是所有字段都相同(似乎是最后一个数组值)。
我似乎无法弄清楚,你可以吗?非常感谢您的宝贵时间。
更新
我刚刚想到,下划线在查询中的参数名称中是否有效?
另一个更新
这是echo $query的输出
UPDATE `personnel` SET `first_name` = :first_name, `last_name` = :last_name, `email` = :email WHERE id = :id LIMIT 1
我还设计了将多个参数绑定到查询的方法。我以前从未在循环中做过,但我认为它会起作用。在 Kohana 2.x 中,我一直使用 $bindings[] = 'tom@jones.com' 等,但据我所知,新的 Kohana 不接受数组。
最终更新
谢谢大家,我认为它是通过引用传递的。我通过将其设置为 $updates[$key]
看起来我也可以使用param() 方法而不是绑定。 View source
【问题讨论】:
标签: php database insert kohana