public function testSimpleQuery() { # -------------------------------------------------------------------------- # Create table and truncate DB::query("CREATE TABLE IF NOT EXISTS users (\n \t\tid INT(11) AUTO_INCREMENT,\n \t\tusername VARCHAR(55),\n \t\tpassword text,\n \t\tPRIMARY KEY (id)\n \t)"); DB::query("TRUNCATE users"); # -------------------------------------------------------------------------- # Insert some data DB::execute("INSERT INTO users (username,password) VALUES (:u1,:p1),('guest','guest')", [':u1' => 'admin', ':p1' => 'admin']); # Get "first" of last insert id $this->assertEquals(1, DB::getInsertID()); # -------------------------------------------------------------------------- # Check results $results = DB::fetch("SELECT * FROM users"); $this->assertEquals($results[0], ['id' => 1, 0 => 1, 'username' => 'admin', 1 => 'admin', 'password' => 'admin', 2 => 'admin']); # -------------------------------------------------------------------------- # Check count $this->assertEquals(DB::count(DB::query("SELECT * FROM users")), 2); }
/** * Execute the query and insert a record * * @param array $data array of elements to insert (name column => value column) * @param bool $ignore ignore the duplicates(true) or reproduce an error(false) * @return int last id insert */ public function insert($data = [], bool $ignore = false) { $t = clone $this; $data = empty($t->getBuilder()->getInsert()) ? $data : array_merge($data, $t->getBuilder()->getInsert()); if (empty($data)) { return 0; } if (is_object($data) && $data instanceof Closure) { $c = $data(); $t->builder->prepare = array_merge($t->builder->prepare, $c->builder->prepare); $values = DB::SQL()::VALUES($c->SQL_UNION()); $columns = DB::SQL()::INSERT_COLUMNS($c->builder->select); } else { if (!isset($data[0])) { $data = [$data]; } $values = []; foreach ($data as $k) { $value = []; foreach ($k as $v) { $value[] = $t->setPrepare($v); } $values[] = DB::SQL()::VALUES($value); } $values = DB::SQL()::INSERT_VALUES($values); $columns = DB::SQL()::INSERT_COLUMNS(array_keys($data[0])); } $q = DB::count($t->query(DB::SQL()::INSERT($this->getBuilderTable(), $columns, $values, $ignore))); # Get all ID from last Insert # Granted with InnoDB return range($i = DB::getInsertID(), $i + $q - 1); }