PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Thursday, March 3, 2022

[FIXED] incrementing value of column value with updateAll()

 March 03, 2022     cactiverecord, yii, yii-cactiverecord, yii2     No comments   

Issue

This works very well:

   $test = self::updateAll(
                        array( 'left_nr' => '3',
                               'right_nr' => '3', ),
                        'left_nr>=:left_nr AND right_nr>=:right_nr',
                        array(
                            ':left_nr' => $parent->left_nr,
                            ':right_nr' => $parent->right_nr,
                            //':new_left_nr' => 'left_nr + 2',
                            //':new_right_nr' => 'right_nr + 2'

                        )
                    );

but what I want is:

   $test = self::updateAll(
                        array( 'left_nr' => ':new_left_nr',
                               'right_nr' => ':new_right_nr', ),
                        'left_nr>=:left_nr AND right_nr>=:right_nr',
                        array(
                            ':left_nr' => $parent->left_nr,
                            ':right_nr' => $parent->right_nr,
                            ':new_left_nr' => 'left_nr + 2',
                           ':new_right_nr' => 'right_nr + 2'

                        )
                    );

When I try that code, I get following error:

CDbCommand failed to execute the SQL statement: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens. The SQL statement executed was: UPDATE test_nested_set SET left_nr=:yp0, right_nr=:yp1 WHERE left_nr>=:left_nr AND right_nr>=:right_nr

How can I achieve it?


Solution

Your code is wrong, you can achieve this goal with something like updateCounters() like below:

<?php

$test = self::model()->updateCounters(
    array(
        'left_nr' => 2, // this is equal to => left_nr = left_nr+2
        'right_nr' => 2
    ), 
    'left_nr >= :left_nr AND right_nr >= :right_nr',
    array(
        ":left_nr" => $parent->left_nr,
        ":right_nr" => $parent->right_nr,
    )
);

?>

Yii defines UpdateCounters() :

Updates one or several counter columns. Note, this updates all rows of data unless a condition or criteria is specified.



Answered By - Ali MasudianPour
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing