Работа с MySQLi

Работа с MySQLi

MySQLi - это улучшенный драйвер для работы с базами данных MySQL
Подробнее о драйвере вы можете прочитать в Википедии

Несколько примеров:

Инициализация базы данных
<?php
$mysqli = new mysqli('localhost','user','password','base');
if(!$mysqli) $mysqli->error;

Установка кодировки
<?php
$mysqli->set_charset('utf8');

Запрос в базу данных
<?php
//готовим запрос
$result = $mysqli->prepare("SELECT `col1`, `col2` FROM `table` WHERE `id`=?");
//вставляем параметры. 
//'i' - integer, 'd' - double или float, 's' - string
$result->bind_param('i', $_GET['id']);
//выполняем запрос
if($result->execute()){
    //подготавливаем переменные в которые будут занесены результаты
    $result->bind_result($col1, $col2);
    //заполняем переменные
    $result->fetch();
    //освобождаем память
    $result->close();
}else{
    //если запрос Не выполнился
    //выдаем ошибку
    die('error - '.$mysqli->errno.' - '.$mysqli->error);
}

Количество записей(1 вариант)
На примере предыдущего запроса
<?php
if($result->execute()){
    $count = $result->num_rows;
    $result->close();
}

Количество записей (2 вариант)
<?php
$result = $mysqli->prepare("SELECT COUNT(*) as `count` FROM `table`");
if($result->execute()){
    $result->bind_result($count);
    $result->fetch();
    $result->close();
}

Последний id insert
<?php
$result = $mysqli->prepare("INSERT INTO `table` (`col_1`,`col_2`) VALUES (?,?)");
$result->bind_param('is', $int_val, $string_val);
if($result->execute()){
    $last = $mysqli->insert_id;
    $result->close();
}

Чтобы упростить работу с бд можно создать пользовательскую функцию, например:
<?php
function db(){
    static $mysqli = null;
    if(!$mysqli){
        $mysqli = new mysqli('localhost','user','password','base');
        $mysqli->set_charset('utf8');
    }
    return $mysqli;
}

function prepare($val){
    return db()->prepare($val);
}

function otherUserFunc(){
    $data = prepare("SELECT `password` FROM `users` WHERE `id`=?");
    $data->bind_param('i', $_POST['id']);
    if($data->execute()){
        $data->bind_result($password);
        $data->fetch();
        $data->close();
    }
    if($password !== $_POST['password']){
        return false;
    }else{
        return true;
    }
}

Один совет! Откажитесь от "*" в запросе, доставайте только нужные данные, пример:
<?php
"SELECT `id`,`text` FROM `news` WHERE `id`=?";

Спасибо за внимание smile

CoolCMS

URL: https://visavi.net/articles/551