First of all:
SELECT `key`, `value` FROM settings
WHERE `key` = :base_url
OR `key` = :google_analytics
OR `key` = :site_domain
Is this correct way of selecting multiple rows? Or is there a better way? Because it is not really OR
, but all of them... So it just doesn't sound right.
Question number 2:
This is my query that selects users with pagination:
SELECT id, email, verified, level, name_surname, age, sex, profession, education, location, privacy, suspend FROM users LIMIT :start, :results
Sometimes I want to pass array of users to return to this query, like array(1,2,3,4,5)
.
Obviously simply adding WHERE $array
doesn't work. So how would I do that?
Sometimes I don't want to pass this array of ids, so how do I switch between state when there is id list and when there is not? Do I simply create php if else on prepare statement? That seems obvious, but it is better to ask about best practices :)
1. The multiply values in where clause, there is no need to use OR. use in, like in query blow.
SELECT `key`, `value` FROM settings
WHERE `key` in ( :base_url, :google_analytics, :site_domain);
2. Same as the first.
SELECT * FROM users where id in (1,2,3,4,5);
so If you have an array of user ids, you must to implode it by ',' glues.
heres a whole example with php;
<?php
$users = array(1,2,3,4,5);
$usersStr = implode(',', $users); // returns 1,2,3,4,5
$sql = "SELECT * FROM users where id in ({$userStr})";
....
I'm not sure that I understand what you mean by all of them
, but if you use OR
it means "any of these conditions can be true, even if multiple of them are true." This is different from the common English usage of "or," which would be exclusive.
If you want all conditions to be true simultaneously, use AND
.
It is also simpler and more efficient to use IN
rather than OR
when comparing to multiple conditions at the same time as in your query.
A prepared statement, `WHERE .. IN(..)` query and sorting — with MySQL
Essentially you should always have an array even if you pass in a scalar value:
$values = (array)$argument;
$conditions = implode(",", array_fill(0, count($values), "?");
// assuming you're using PDO
$stmt->execute($conditions);
For question 1, I think @Ronald have already given you a link to refer to;
For question 2, I think you can do it in this way:
public function myquery($condition){
if is_string($condition){
//do something to compose the query for string
}
if is_array($condition){
//do something to compose the query for array
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.