当我运行下面的代码来更新行:无法使用PDO
// Loop through each store and update shopping mall ID
protected function associateShmallToStore($stores, $shmall_id) {
foreach($stores as $store_id) {
$sql .= 'UPDATE my_table SET fk_shmallID = :shmall_id WHERE id = :store_id';
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':shmall_id', $shmall_id);
$stmt->bindParam(':store_id', $store_id);
$stmt->execute();
}
}
我得到以下信息:
我也尝试没有成功以下(不含$stmt->bindParam
) :
$stmt->execute(array($shmall_id, $store_id));
我不明白我在做什么错。
UPDATE 我已更新我的代码以反映我在源代码中实际得到的内容。这里不应该有任何错别字。
更新2
我尝试这样做,但我仍然得到同样的错误消息。
protected function associateShmallToStore($stores, $shmall_id) {
$i = 0;
$sql .= "UPDATE sl_store ";
foreach($stores as $store_id) {
$i++;
$sql .= 'SET fk_shmallID = :shmall_id, lastUpdated = NOW() WHERE id = :store_id_'.$i.',';
}
$sql = removeLastChar($sql);
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':shmall_id_'.$i, $shmall_id);
$i = 0;
foreach($stores as $store_id) {
$i++;
$stmt->bindParam(':store_id_'.$i, $store_id);
}
$stmt->execute();
}
这是SQL查询的输出:
UPDATE sl_store
SET fk_shmallID = :shmall_id, lastUpdated = NOW() WHERE id = :store_id_1,
SET fk_shmallID = :shmall_id, lastUpdated = NOW() WHERE id = :store_id_2
更新3
我endet了使用的代码是这样的:
foreach($stores as $store_id) {
$sql = "UPDATE sl_store SET fk_shmallID = :shmall_id WHERE id = :store_id";
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':shmall_id', $shmall_id);
$stmt->bindParam(':store_id', $store_id);
$res = $stmt->execute();
}
为什么在SQL UPDATE查询中两次写入SET?请参阅:http://dev.mysql.com/doc/refman/5.0/en/update.html – Dor
@Steven,这是一个无效的SQL查询。你之前拥有的是正确的。只需为每行运行一个更新并删除拼接运算符。 – rid
@Radu - 是的,我现在正在工作:) – Steven