Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在zend中使用动态数据更新查询?_Mysql_Zend Framework_Zend Db - Fatal编程技术网

Mysql 在zend中使用动态数据更新查询?

Mysql 在zend中使用动态数据更新查询?,mysql,zend-framework,zend-db,Mysql,Zend Framework,Zend Db,我正在使用zend,我有如下代码 class Admin_Model_DbTable_Inv extends Zend_Db_Table_Abstract { protected $_name = 'test'; public function updateproductstock($qty,$pid) { $data = array( 'stock' => 'stock - 2' ); $th

我正在使用zend,我有如下代码

class Admin_Model_DbTable_Inv extends Zend_Db_Table_Abstract
{
    protected $_name = 'test';
    public function updateproductstock($qty,$pid)
    {
        $data = array(
            'stock' => 'stock - 2'
        );
        $this->_db->update($this->_name, $data, product = '.$pid.');
    } 
}
在这里,我想从库存中减去我的数量。例如,2将是数量<代码>数量将是动态数据。如何在此处使用zend update。请帮忙

更新了我的帖子

 class Admin_Model_DbTable_Inv extends Zend_Db_Table_Abstract
 {
     protected $_name = 'test';

     public function updateproductstock($qty)
     {           
         $r = $this->fetchRow($this->select()->where('product  = ?', 1));
         $r->stock -= $qty;
         $r->save();
         $data = array(
             'stock' => 'stock - '.(string) $qty;
         );
         $this->_db->update($this->_name, $data, "product = '1'");
     }
 }

ps:所有变量的前缀应为$

$db->引用数据库对象(类)。请您发布这段代码所指的类,好吗?或者至少是“更新”function@luc,我同意这个问题有点含糊不清,但是关于zend framework,你可以想象它指的是什么以及他的更新方法。@LukeCoulton这是zend framework,
update
是zend_Db的方法。抱歉,我错过了zend framework标签。我使用zend studio纯粹是为了编程$oDb->update('test',$values,'product_id=34');这会更新当前股票中的0值,当我运行这个$values=array('stock'=>'41-'(string)2)时$oDb->update('test',$values,'product_id=34');它将41更新为库存,并且不减去库存。所以这个查询不起作用。@Dinesh您得到的是0,可能是因为您的列是INT,所以如果您用字符串填充它,它将被转换为整数(这里给出0)。看看我的答案,也许会有用。@Matthieu你是对的,我不明白,只要无法识别任何变量……实际上我想从测试表中的数量中减去库存值,然后从数据库中读取当前库存值,并使用我答案的代码(我将对其进行编辑)是的,但是假设我的购物车中有10个产品,我将循环这个updateproductstock函数,然后它将需要一些时间来执行。这将是无效的。对不起我的错误。我给它只是一个例子…会立即更新帖子好的,我终于得到了你想要做的。请参阅我的编辑,也许Zend_Db_Expr可以,它可以防止Zend_Db转义字符串(因此它将是一个有效的SQL表达式)。
 class Admin_Model_DbTable_Inventory extends Zend_Db_Table_Abstract
 {
     protected $_name = 'test';

     public function updateproductstock($qty,$pid)
     {
         $data = array(
             'stock' => new Zend_Db_Expr('stock - '.$qty);
         );
         $this->_db->update($this->_name, $data, product = '.$pid.');
     }
 }