КОнтакты, предложения, отзывы

.rar или .zip
Вложение
Онлайн-чат
На этом сайте, вы найдёте полезную информацию, практические советы в области веб-программирования, веб-дизайна и веб-разработок в целом. Мы с удовольствием поделимся с вами реальными примерами и решениями задач, связанных с jQuery , JavaScript , PHP и MySQL , версткой сайтов , поможем разобраться новичкам с современными технологиями, такими как Ajax , HTML5 , CSS3 и многими другими.

MySQLI подготовленные операторы

Использование подготовленных операторов

Библиотека mysqli поддерживает использование подготовленных операторов. Они полезны для ускорения выполнения множества одних и тех же запросов, но сразными данными. Подготовленные операторы также предохраняют от атак внедрения SQL-кода во вводимые данные. Основная концепция подготовленного оператора состоит в раздельной отправки MySQL шаблона запроса, который должен быть выполнен, и данных для заполнения этого шаблона. Вы можете посылать множество одних и тех же данных одному подготовленному оператору. Эта возможность очень полезна при выполнении групповых вставок.

INSERT

При вставке новых данных в таблицу подготовленные операторы можно использовать следующим образом:
include_once 'db.php';
$query = "select `title`, `text` from `statti`";
$stmt = $db->prepare($query);
$stmt->bind_result($title, $text);
$stmt->execute();
while($stmt->fetch()){
  echo $title  . $text;
}
$stmt->close();
include_once 'db.php';
if(!empty ($_POST['id'])
 && !empty ($_POST['title']) 
 &&  !empty($_POST['discription'])
 &&  !empty($_POST['category'])){
  $id = $_POST['id'];
  $title = $_POST['title'];
  $discription =  $_POST['discription'];
  $category = $_POST['category'];
  $query = "insert into `statti` (`id`, `title`, `discription`, `category`) values (?, ?, ?, ?)";
  $stmt = $db->prepare($query);
  $stmt->bind_param("isss",$id, $title, $discription, $category);
  if($stmt->execute()){
    echo $stmt -> affected_rows. ' статей добавлено в базу данных.';
  }
  $stmt->close();
}
Рассмотрим приведенный код.
Файл db.php, ответственный за подключение к базе:
if(!$db=new mysqli('localhost', 'root', '', 'testsite')){
  exit('wrong connection');
}
if (!$db->set_charset("utf8")) {
  printf("Ошибка при загрузке набора символов utf8: %s\n", $db->error);
}
При построении запроса вместо каждого фрагмента данных помещается знак вопроса (?). При этом не используются ни кавычки, ни какие-либо другие разделительные символы.
Во второй строке вызывается $db -> prepare ($query). Эта строка создает объект оператора или ресурс, который затем будет использоваться для дальнейшей обработки.
В объекте оператора определен метод bing_param (). Назначение bing_param() состоит в том, чтобы сообщить PHP, какими переменными должны быть замещены знаки вопроса в запросе. Первый параметр представляет собой строку формата, чем-то похожую на строку формата, используемую в функции printf(). Используемое значение "isss", означает, что будут передоваться число и три строки. Допускается также передача числа двойной точности (d) и большого двоичного объекта (b). После параметра формата должны следовать переменные, значения который будут замещать знаки вопроса в запросе, в порядке их следования.
Вызов $stmt -> execute() выполняет запрос. Затем можно посмотреть количество задействованных строк и закрыть оператор.
Чем же так полезен подготовленный оператор? Замечательно то, что можно изменить значения четырех связанных переменных и еще раз выполнить запрос без необходимости его подготовки. Данная возможность исключительно полезна при выполнении крупных групповых вставок.

UPDATE

Для обновления записи в таблице напишем следующий код:
include_once 'db.php';
if(isset($_POST['id'], $_POST['title'], $_POST['discription'], $_POST['text'])){
  $id = $_POST['id'];
  $title = $_POST['title'];
  $discription = $_POST['discription'];
  $text = $_POST['text'];
  $query = "update `statti` set `title`=?, `discription`=?,`text`=?  WHERE `id`='$id'";
  $stmt = $db->prepare($query);
  $stmt->bind_param("sss",  $title, $discription, $text);
  if($stmt->execute()) $stmt -> affected_rows. ' статей обновлено.';
  $stmt->close();
}

SELECT

Подобно связыванию параметров, можно связать и результаты. Для запросов SELECT можно использовать $stmt -> bing_result(), для построения списка переменных, в которых должны помещаться столбцы результата. Каждый раз, когда вы вызываете $stmt -> fetch (), значения столбцов из следующей строки результирующего набора заносятся в заданные переменные связи. Например, в случае поиска статьи, можно было бы воспользоваться следующим оператором:
$stmt->bing_result($title, $text);
для связывания перечисленных двух переменных с двумя столбцами, возвращаемыми запросом. После вызова
$stmt->execute();
можно сделать следующий вызов:
$stmt->fetch();
в цикле. Каждое такое обращение извлекает следующую строку из результата и заносит ее в переменные.
include_once 'db.php';
$query = "select `title`, `text` from `statti`";
$stmt = $db->prepare($query);
$stmt->bind_result($title, $text);
$stmt->execute();
while($stmt->fetch()){
  echo $title  . $text;
}
$stmt->close();
2015.06.25 71

Девушка—программист, недавно вышедшая замуж, пишет матери по электронной почте: — Мама, мой муж оказался настояшим сексуальным маньяком! Он требует спать с ним везде: на кухне, в ванной, на подоконнике и даже за компю ыдвоа афп шгвыитр иядмвщжтич
Войдите или Зарегистрируйтесь чтобы оставить комментарий

Комментарии


    Яндекс.Метрика Яндекс.Метрика