2014-11-05 61 views
0

我试图用Zend_Db_Adapter更新查询,但是当我做查询的回声时,我想要更新的值仍然是“?”。我入住的是价值$ foo的,我总有1个或0 我的代码:?而不是zend更新的价值

$this->_db->beginTransaction(); 
try { 
    foreach($a_result as $k => $j){ 
     $foo = ($j['val1'] >= $j['val2']) ? 1 : 0 ; 
     $a_data = array('bar' => $foo); 
     $where['id = ?'] = $k; 
     $update = $this->_db->update($this->_name, $a_data, $where);          
    } 
    $this->_db->commit(); 
} catch (Exception $e) { 
    $this->_db->rollBack(); 
    echo $e->getMessage(); 
} 

我所有的querys看起来是这样的:

  • UPDATE foo SET bar =? WHERE(id = 39)
  • UPDATE foo SET bar =? WHERE(ID = 40)
  • [...]
+0

检查它是否将$ foo的值视为布尔值,可能是您需要将$ foo的值转换为 – almaruf 2014-11-05 10:32:34

+0

将其考虑为$ foo作为int – Snabow 2014-11-05 10:37:57

回答

0

此代码对我的作品,尽量把你的循环内,并看看是否有帮助:)

$a_data = array(
      'bar' => $foo 
); 

$_where = array(); 
$_where[] = "id = '" . $k . "'"; 

除此之外,我认为你的问题存在于$哪里,这是写在一个奇怪的方式。我通常使用,对于选择

->where('ID = ? ', $k) 

在你的情况我会使用

$where = $this->_yourTable->getAdapter()->quoteInto('id = ?', $id) 

不管怎么说,第一个应该是简单的!

+0

对于此语法,它效果更好,谢谢。顺便说一下,我在上面使用的synthax是Zend 1.x文档中的一个节目。 – Snabow 2014-11-05 13:29:51

+0

我也使用Zend 1.12,但是,老实说,我从来没有尝试过你的语法,因为这个工作。我不能排除有更好的办法,但我很高兴这有助于你:) – Gounemond 2014-11-05 13:34:53