Оглавление

6.4. Обработка результата запроса

Для обработки результата запроса при процедурном стиле используются следующие функции:
□ mysqli_num_rows(<Идентификатор результата>) возвращает количество записей в результате:

$host = "localhost";
if (@$db = mysqli_connect($host, "root", "123456", "tests")) {
mysqli_query($db, "SET NAMES cp1251");
if ($res = mysqli_query($db, 'SELECT * FROM `City`')) {
echo mysqli_num_rows($res) . "<br>";
mysqli_free_result($res);
}
mysqli_close($db);
}
else {
echo "Не удалось установить подключение к базе данных";
}

□ mysqli_field_count(<Идентификатор соединения>) возвращает количество полей в результате последнего SQL-запроса:

$host = "localhost";
if (@$db = mysqli_connect($host, "root", "123456", "tests")) {
mysqli_query($db, "SET NAMES cp1251");
if ($res = mysqli_query($db, 'SELECT * FROM `City`')) {
echo mysqli_field_count($db) . "<br>";
mysqli_free_result($res);
}

mysqli_close($db);
}
else {
echo "Не удалось установить подключение к базе данных";
}


□ mysqli_fetch_array(<Идентификатор результата>, [<Флаг>]) возвращает результат в виде списка и (или) ассоциативного массива в зависимости от значения необязательного параметра <Флаг>. Параметр может принимать следующие значения:
   • MYSQLI_BOTH — результат в виде списка и ассоциативного массива (значение по умолчанию);
   • MYSQLI_NUM — результат в виде списка;
   • MYSQLI_ASSOC — результат в виде ассоциативного массива.


Приведем пример, в котором используются все эти варианты:

$host = "localhost";
if (@$db = mysqli_connect($host, "root", "123456", "tests")) {
mysqli_query($db, "SET NAMES cp1251");
if ($res = mysqli_query($db, 'SELECT * FROM `City`')) {
while ($pole = mysqli_fetch_array($res)) {
echo $pole[0] . ' – ' . $pole['City'] . '<br>';
}
mysqli_free_result($res);
}
if ($res = mysqli_query($db, 'SELECT * FROM `City`')) {
$pole = mysqli_fetch_array($res, MYSQLI_BOTH);
echo $pole[0] . ' – ' . $pole['City'] . '<br>';
$pole = mysqli_fetch_array($res, MYSQLI_NUM);
echo $pole[0] . ' – ' . $pole[1] . '<br>';
$pole = mysqli_fetch_array($res, MYSQLI_ASSOC);
echo $pole['id_City'] . ' – ' . $pole['City'] . '<br>';
mysqli_free_result($res);
}

mysqli_close($db);
}
else {
echo "Не удалось установить подключение к базе данных";
}

□ mysqli_fetch_row(<Идентификатор результата>) возвращает результат в виде списка:

$host = "localhost";
if (@$db = mysqli_connect($host, "root", "123456", "tests")) {
mysqli_query($db, "SET NAMES cp1251");
if ($res = mysqli_query($db, 'SELECT * FROM `City`')) {
while ($pole = mysqli_fetch_row($res)) {
echo $pole[0] . ' – ' . $pole[1] . '<br>';
}
mysqli_free_result($res);
}
mysqli_close($db);
}
else {
echo "Не удалось установить подключение к базе данных";
}

□ mysqli_fetch_assoc(<Идентификатор результата>) возвращает результат в виде ассоциативного массива:

$host = "localhost";
if (@$db = mysqli_connect($host, "root", "123456", "tests")) {
mysqli_query($db, "SET NAMES cp1251");
if ($res = mysqli_query($db, 'SELECT * FROM `City`')) {
while ($pole = mysqli_fetch_assoc($res)) {
echo $pole['id_City'] . ' – ' . $pole['City'] . '<br>';
}
mysqli_free_result($res);
}
mysqli_close($db);
}
else {
echo "Не удалось установить подключение к базе данных";
}

□ mysqli_fetch_object(<Идентификатор результата>) возвращает результат в виде объекта:

$host = "localhost";
if (@$db = mysqli_connect($host, "root", "123456", "tests")) {
mysqli_query($db, "SET NAMES cp1251");
if ($res = mysqli_query($db, 'SELECT * FROM `City`')) {
while ($pole = mysqli_fetch_object($res)) {
echo $pole->id_City . ' – ' . $pole->City . '<br>';
}
mysqli_free_result($res);
}
mysqli_close($db);
}
else {
echo "Не удалось установить подключение к базе данных";
}

□ mysqli_data_seek(<Идентификатор результата>, <Смещение>) перемещает указатель результата на выбранную строку. Нумерация начинается с нуля:

$host = "localhost";
if (@$db = mysqli_connect($host, "root", "123456", "tests")) {
mysqli_query($db, "SET NAMES cp1251");
if ($res = mysqli_query($db, 'SELECT * FROM `City`')) {
mysqli_data_seek($res, 1);
$pole = mysqli_fetch_object($res);
echo $pole->id_City . ' – ' . $pole->City . '<br>';
mysqli_free_result($res);
}
mysqli_close($db);
}
else {
echo "Не удалось установить подключение к базе данных";
}

 

Для обработки результата запроса при объектном стиле используются следующие методы и свойства:
□ num_rows возвращает количество записей в результате:

$host = "localhost";
@$db = new mysqli($host, "root", "123456", "tests");
if (!mysqli_connect_errno()) {
$db->query("SET NAMES cp1251");
if ($res = $db->query('SELECT * FROM `City`')) {
echo $res->num_rows . '<br>';
$res->close();
}
$db->close();
}
else {
echo "Не удалось установить подключение к базе данных";
}

□ field_count возвращает количество полей в результате:

$host = "localhost";
@$db = new mysqli($host, "root", "123456", "tests");
if (!mysqli_connect_errno()) {
$db->query("SET NAMES cp1251");
if ($res = $db->query('SELECT * FROM `City`')) {
echo $res->field_count . '<br>';
$res->close();
}
$db->close();
}
else {
echo "Не удалось установить подключение к базе данных";
}

□ fetch_array([<Флаг>]) возвращает результат в виде списка и (или) ассоциативного массива в зависимости от значения необязательного параметра <Флаг>. Параметр может принимать следующие значения:
   • MYSQLI_BOTH — результат в виде списка и ассоциативного массива (значение по умолчанию);

   • MYSQLI_NUM — результат в виде списка;
   • MYSQLI_ASSOC — результат в виде ассоциативного массива.

 

В следующем примере используются все эти варианты:

$host = "localhost";
@$db = new mysqli($host, "root", "123456", "tests");
if (!mysqli_connect_errno()) {
$db->query("SET NAMES cp1251");
if ($res = $db->query('SELECT * FROM `City`')) {
while ($pole = $res->fetch_array()) {
echo $pole[0] . ' – ' . $pole['City'] . '<br>';
}
$res->close();
}
if ($res = mysqli_query($db, 'SELECT * FROM `City`')) {
$pole = $res->fetch_array(MYSQLI_BOTH);
echo $pole[0] . ' – ' . $pole['City'] . '<br>';
$pole = $res->fetch_array(MYSQLI_NUM);
echo $pole[0] . ' – ' . $pole[1] . '<br>';
$pole = $res->fetch_array(MYSQLI_ASSOC);
echo $pole['id_City'] . ' – ' . $pole['City'] . '<br>';
$res->close();
}
$db->close();
}
else {
echo "Не удалось установить подключение к базе данных";
}

□ fetch_row() возвращает результат в виде списка:

$host = "localhost";
@$db = new mysqli($host, "root", "123456", "tests");
if (!mysqli_connect_errno()) {
$db->query("SET NAMES cp1251");
if ($res = $db->query('SELECT * FROM `City`')) {

while ($pole = $res->fetch_row()) {
echo $pole[0] . ' – ' . $pole[1] . '<br>';
}
$res->close();
}
$db->close();
}
else {
echo "Не удалось установить подключение к базе данных";
}

□ fetch_assoc() возвращает результат в виде ассоциативного массива:

$host = "localhost";
@$db = new mysqli($host, "root", "123456", "tests");
if (!mysqli_connect_errno()) {
$db->query("SET NAMES cp1251");
if ($res = $db->query('SELECT * FROM `City`')) {
while ($pole = $res->fetch_assoc()) {
echo $pole['id_City'] . ' – ' . $pole['City'] . '<br>';
}
$res->close();
}
$db->close();
}
else {
echo "Не удалось установить подключение к базе данных";
}

□ fetch_object() возвращает результат в виде объекта:

$host = "localhost";
@$db = new mysqli($host, "root", "123456", "tests");
if (!mysqli_connect_errno()) {
$db->query("SET NAMES cp1251");
if ($res = $db->query('SELECT * FROM `City`')) {
while ($pole = $res->fetch_object()) {
echo $pole->id_City . ' – ' . $pole->City . '<br>';
}

$res->close();
}
$db->close();
}
else {
echo "Не удалось установить подключение к базе данных";
}

□ data_seek(<Смещение>) перемещает указатель результата на выбранную строку. Нумерация начинается с нуля:

$host = "localhost";
@$db = new mysqli($host, "root", "123456", "tests");
if (!mysqli_connect_errno()) {
$db->query("SET NAMES cp1251");
if ($res = $db->query('SELECT * FROM `City`')) {
$res->data_seek(1);
$pole = $res->fetch_object();
echo $pole->id_City . ' – ' . $pole->City . '<br>';
$res->close();
}
$db->close();
}
else {
echo "Не удалось установить подключение к базе данных";
}

Функция mysqli_real_escape_string(<Идентификатор соединения>, <Строка>) в процедурном стиле и метод real_escape_string(<Строка>) в объектном стиле экранируют все специальные символы в строке, учитывая кодировку соединения. Возвращают строку, которую можно безопасно ис- пользовать в SQL-запросах. Если в файле php.ini включена директива magic_quotes_gpc, то следует удалить автоматически добавленные обратные
косые черты, а затем воспользоваться функцией mysqli_real_escape_string() или методом real_escape_string():


$new_city = "Д'Арк"; // Такие данные передаются из формы
$host = "localhost";
if (@$db = mysqli_connect($host, "root", "123456", "tests")) {
mysqli_query($db, "SET NAMES cp1251");

// Если директива magic_quotes_gpc включена,
// то удаляем защитные косые черты
if (get_magic_quotes_gpc()) {
$new_city = stripcslashes($new_city);
}
// Экранируем спецсимволы
$new_city = mysqli_real_escape_string($db, $new_city);
$query = "INSERT INTO `City` VALUES(NULL, '$new_city')";
mysqli_query($db, $query);
if ($res = mysqli_query($db, 'SELECT * FROM `City`')) {
while ($pole = mysqli_fetch_row($res)) {
echo $pole[0] . ' – ' . $pole[1] . '<br>';
}
mysqli_free_result($res);
}
mysqli_close($db);
}
else {
echo 'Не удалось установить подключение к базе данных';
}

Примечания:
  • Никогда напрямую не передавайте в SQL-запрос данные, полученные из полей формы. Это потенциальная угроза безопасности. Всегда применяйте функцию mysqli_real_escape_string() или метод real_escape_string().
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити