Я совершенно не понимаю как обращаться с 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`?