Я совершенно не понимаю как обращаться с mysqli_result.
Для случая когда мне нужно почить из базы одну строку я использую ту-же функцию что и для получения множественного запроса только слегка модифицированный.
PHP:
скопировать код в буфер обмена
public function fetchRow ($query, array $params) { if ($this->result = $this->link->query($this->getQuery($query, $params)) ) { while ($r = $this->result->fetch_array(MYSQLI_ASSOC)) if ($this->result->num_rows == 1) return $res[0]; else return false; } else { Log::SQL("FAIL(" . $this->link->errno . "):" . $this->link->error . "\n"); return false; } }
Подскажите как правильно получить только одну строку.
Кстати вот мой класс DB, буду рад критике.
Спойлер (Отобразить)
PHP:
скопировать код в буфер обмена
<?PHP /** * Created by PhpStorm. * User: James * Date: 22.01.2016 * Time: 18:25 * Mail: jamesdeht@gmail.com */ final class DB { /** * Stacic copy class DB * * @var DB */ private static $DB = null; /** * @return DB */ public static function get() { if (self::$DB == null) self::$DB = new DB(); return self::$DB; } private $host; private $user; private $pass; private $base; private $link = null; private $result = null; function __construct() { $this->host = DB_HOST; $this->user = DB_USER; $this->pass = DB_PASS; $this->base = DB_BASE; $this->set_connect(); } private function set_connect() { $this->link = new mysqli($this->host, $this->user, $this->pass, $this->base); if ($this->link->connect_error) { die('DB connection fail (N:' . $this->link->connect_errno . '):' . $this->link->connect_error . ';'); } $this->link->query("set names utf8"); return $this->link; } public function select_base($base) { $this->link->select_db($base); } public function getQuery ($query, array $params) { if ($params) { while ($i--) $params[$i] = $this->link->real_escape_string($params[$i]); } Log::SQL($query . "\n"); // Log sq return $query; } public function execute ($query, array $params) { if ($this->link->query($this->getQuery($query, $params)) ) { if ($this->link->insert_id) return $this->link->insert_id; else return true; } else { Log::SQL("FAIL(" . $this->link->errno . "):" . $this->link->error . "\n"); return false; } return true; } public function fetchResult ($query, array $params) { if ($this->result = $this->link->query($this->getQuery($query, $params)) ) { while ($r = $this->result->fetch_array(MYSQLI_ASSOC)) return $res; } else { Log::SQL("FAIL(" . $this->link->errno . "):" . $this->link->error . "\n"); return false; } } public function fetchRow ($query, array $params) { if ($this->result = $this->link->query($this->getQuery($query, $params)) ) { while ($r = $this->result->fetch_array(MYSQLI_ASSOC)) if ($this->result->num_rows == 1) return $res[0]; else return false; } else { Log::SQL("FAIL(" . $this->link->errno . "):" . $this->link->error . "\n"); return false; } } public function close_connection() { $this->link->close(); } public function __destruct() { $this->close_connection(); } }
И пользуясь случаем хочу спросить есть ли разница скорости работы при запросах Select * и Select `field1`, `field2`, `field3`?
|