2

I have an array with a dynamic amount of strings

$arr = array("aaaaa", "bbbbb", "ccccc");

How would I create an SQL statement such as:

$sql = "SELECT * FROM table WHERE name=? OR name=? OR name=?";
$query = $this->db->query($sql, $arr));

Dynamically

fdsfdsgf
  • 35
  • 6
  • [See this answer](https://stackoverflow.com/a/14767651/3585500) (and the [one below it](https://stackoverflow.com/a/14767572/3585500) ) on how to build a PDO prepared statement with a dynamic number of values. As in... `WHERE name in (?, ?, ?, ...)`. – ourmandave Nov 02 '17 at 18:27

3 Answers3

2

If you're using the CI Query Builder you can use where_in (also or_where_in) functions.

http://www.codeigniter.com/userguide3/database/query_builder.html#looking-for-specific-data

$this->db->where_in()

Generates a WHERE field IN (‘item’, ‘item’) SQL query joined with AND if appropriate

$names = array('Frank', 'Todd', 'James');

$this->db->where_in('username', $names);

// Produces: WHERE username IN ('Frank', 'Todd', 'James')

 $arr = array('a','b','c');
 $this->db->where_in('name', $arr);
Community
  • 1
  • 1
ourmandave
  • 1,505
  • 2
  • 15
  • 49
0

This might do what you are looking for. It will dynamically create an sql query based on how big your array is.

$arr = array("aaaaa", "bbbbb", "ccccc");
$sql = "SELECT * FROM table WHERE";
for($i = 0; $i < count($arr); $i ++){
   if($i > 0){
        $sql .= " OR "; 
   }
   $sql .= " name=?";
}
echo $sql; // SELECT * FROM table WHERE name=? OR name=? OR name=?
0

How about using array_fill()?

$arr = array("aaaaa", "bbbbb", "ccccc");


$sql = "SELECT * FROM table WHERE ";
$sql .= implode(' OR ', array_fill(0, count($arr), 'name=?'));
$query = $this->db->query($sql, $arr));
Joseph Marikle
  • 76,418
  • 17
  • 112
  • 129