Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

where NULL is causing problems #295

Open
nuryagdym opened this issue Dec 19, 2019 · 5 comments
Open

where NULL is causing problems #295

nuryagdym opened this issue Dec 19, 2019 · 5 comments

Comments

@nuryagdym
Copy link

nuryagdym commented Dec 19, 2019

When I say,
$this->where('user_id', $some_value) ->update($update_data);
it is not problem until we $some_value is NULL.
if $some_value is NULL normally if we don't use MY_Model it is not problem
BUT on MY_Model when $some_value = NULL then query becomes:

update mytable set update_field=value
I mean
where user_id IS NULL
is not added which updates all the rows in table

I faced this problem several times, in accidently updated all rows, because without using MY_Model I don't have to control if $some_value is null in PHP, QB will generate WHERE user_id IS NULL thus, nothing will be updated.

@salain
Copy link
Collaborator

salain commented Dec 20, 2019

Here you can write your where like this

where('user_id IS NULL', NULL, FALSE,FALSE,FALSE,TRUE)

Result for a select query:
SELECT * FROM table WHERE user_id IS NULL
It will give you the same WHERE clause for an UPDATE query.

@nuryagdym
Copy link
Author

nuryagdym commented Dec 20, 2019

I know it, you did not understood me.
I don't the where() function of MY_Model behave same as the QB of Codeigniter.
For example,
$this->where('user_id', $some_value) ->update($update_data);
here I expect $some_value not to be NULL usually, but for some reason, code error (in my case was my fault, but I was testing) or to other kind of error, it is value is set to NULL.
If I have this query with $some_value = NULL
$this->where('user_id', $some_value) ->update($update_data);
for QB it adds where user_id IS NULL condition, which I know that user_id's in that table are not NULL, so running this query with QB is safe.
But when using MY_Model, it discards this where rule, and as result whole table was updated (which I don't want to it).

@salain
Copy link
Collaborator

salain commented Dec 20, 2019

Then you should validate $some_value to make sure it is not NULL.
Rather than to hope the framework/library will do it for you.

@nuryagdym
Copy link
Author

as I said I just expecting MY_Model behave same as QB in this case.
Libraries are for making our job easier.
if library expecting me
where('user_id IS NULL', NULL, FALSE,FALSE,FALSE,TRUE)
to write NULL conditions and IF checking everywhere it is nonsense.
It needs tiny change, that is it.

@emrahoruc
Copy link

@nuryagdym
Extend the MY_Model and add your methods.

class Base_Model extends MY_Model {  

    public function __construct()
    {
        parent::__construct();
    }

    public function whereNull($key)   
    {
        $this->where($key . ' IS NULL', NULL, FALSE,FALSE,FALSE,TRUE);
        return $this;
    }

    public function whereNotNull($key)   
    {
        $this->where($key . ' IS NOT NULL', NULL, FALSE,FALSE,FALSE,TRUE);
        return $this;
    }
}

// $this->Products_model->whereNull('user_id')->get_all();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants