Добавить результаты SQL из цикла в список [duplicate]

Можно изменить курсор на тот, который был загружен за пределы Программного центра - метод аналогичен тому, как это было сделано с Lucid. После загрузки темы мыши извлеките файл tar.gz где-нибудь, вы можете найти его позже. Затем вам понадобится доступ суперпользователя к вашей файловой системе - откройте терминал (Ctrl + Alt + T), затем введите

gksu nautilus

и нажмите enter. Введите пароль в появившемся окне. Теперь у вас есть root-доступ к вашей файловой системе, поэтому будьте осторожны. Перейдите к /usr/share/icons/ Держите это место открытым, но откройте другое окно или вкладку и перейдите в каталог, в котором вы извлекли тему мыши. Скопируйте папку тем в /usr/share/icons/, после чего вы сможете увидеть свою новую тему в инструменте Gnome Tweak. Но мы еще не закончили - откройте терминал и введите

gksu nautilus

gksu gedit / usr / share / icons / default / index. theme

и измените имя после «Inherits =» на имя вашей новой темы. Это делает эту тему курсором по умолчанию для всей системы, и это будет курсор, видимый на экране входа в систему.

Итак, хотя и не идеальный и не такой простой, как когда-то (подумайте о пред-Lucid) все еще можно установить темы курсора в Oneiric.

2202
задан 13 December 2017 в 20:11

6 ответов

Расширение MySQL является самым старым из трех и было оригинальным способом, которым разработчики использовали для связи с MySQL. Это расширение теперь устарело в пользу двух других альтернатив из-за улучшений, сделанных в новых версиях как PHP, так и MySQL.

MySQLi - это «улучшенное» расширение для работы с базами данных MySQL. Он использует функции, доступные в новых версиях сервера MySQL, предоставляет разработчику функционально-ориентированный и объектно-ориентированный интерфейс, а также делает несколько других отличных вещей. PDO предлагает API, который объединяет большинство функций, которые ранее были распространены в основных расширениях доступа к базе данных, то есть MySQL, PostgreSQL, SQLite, MSSQL и т. Д. Интерфейс предоставляет объекты высокого уровня для программиста для работы с подключениями к базе данных, запросами и результирующие наборы и драйверы низкого уровня выполняют связь и обработку ресурсов с сервером базы данных. Много дискуссий и работы идет в PDO, и это считается подходящим методом работы с базами данных в современном профессиональном коде.
30
ответ дан 15 August 2018 в 17:01

Функции mysql_:

устарели - они больше не поддерживаются, не позволяют легко перемещаться в другой бэкэнд базы данных, не поддерживают подготовленные заявления, поэтому поощряют программистов использовать конкатенацию для создания запросов, что приводит к уязвимостям SQL-инъекций
135
ответ дан 15 August 2018 в 17:01
  • 1
    # 2 в равной степени относится к mysqli_ – eggyal 12 October 2012 в 18:35
  • 2
    чтобы быть справедливым, учитывая вариации на диалекте SQL, даже PDO не дает вам № 2 с какой-либо степенью определенности. Для этого вам понадобится надлежащая ORM-обертка. – SDC 23 October 2012 в 19:55
  • 3
    @SDC - проблема со стандартами заключается в том, что есть , поэтому многие из них ... – Alnitak 23 October 2012 в 20:06
  • 4
    [D0] xkcd.com/927 – Lightness Races in Orbit 24 December 2012 в 20:30
  • 5
    функция mysql_* является оболочкой в ​​функции mysqlnd для более новых версий PHP. Поэтому, даже если прежняя клиентская библиотека больше не поддерживается, mysqlnd поддерживается :) – hakre 31 May 2013 в 19:25

Функции, похожие на этот тип mysql_connect(), mysql_query(), представляют собой предыдущие функции PHP, т. е. (PHP 4) и теперь не используются.

Они заменяются на mysqli_connect() , mysqli_query() аналогично в последнем PHP5.

Это причина ошибки.

0
ответ дан 15 August 2018 в 17:01

Можно определить почти все функции mysql_ *, используя mysqli или PDO. Просто включите их поверх своего старого PHP-приложения, и он будет работать на PHP7. Мое решение здесь.

<?php

define('MYSQL_LINK', 'dbl');
$GLOBALS[MYSQL_LINK] = null;

function mysql_link($link=null) {
    return ($link === null) ? $GLOBALS[MYSQL_LINK] : $link;
}

function mysql_connect($host, $user, $pass) {
    $GLOBALS[MYSQL_LINK] = mysqli_connect($host, $user, $pass);
    return $GLOBALS[MYSQL_LINK];
}

function mysql_pconnect($host, $user, $pass) {
    return mysql_connect($host, $user, $pass);
}

function mysql_select_db($db, $link=null) {
    $link = mysql_link($link);
    return mysqli_select_db($link, $db);
}

function mysql_close($link=null) {
    $link = mysql_link($link);
    return mysqli_close($link);
}

function mysql_error($link=null) {
    $link = mysql_link($link);
    return mysqli_error($link);
}

function mysql_errno($link=null) {
    $link = mysql_link($link);
    return mysqli_errno($link);
}

function mysql_ping($link=null) {
    $link = mysql_link($link);
    return mysqli_ping($link);
}

function mysql_stat($link=null) {
    $link = mysql_link($link);
    return mysqli_stat($link);
}

function mysql_affected_rows($link=null) {
    $link = mysql_link($link);
    return mysqli_affected_rows($link);
}

function mysql_client_encoding($link=null) {
    $link = mysql_link($link);
    return mysqli_character_set_name($link);
}

function mysql_thread_id($link=null) {
    $link = mysql_link($link);
    return mysqli_thread_id($link);
}

function mysql_escape_string($string) {
    return mysql_real_escape_string($string);
}

function mysql_real_escape_string($string, $link=null) {
    $link = mysql_link($link);
    return mysqli_real_escape_string($link, $string);
}

function mysql_query($sql, $link=null) {
    $link = mysql_link($link);
    return mysqli_query($link, $sql);
}

function mysql_unbuffered_query($sql, $link=null) {
    $link = mysql_link($link);
    return mysqli_query($link, $sql, MYSQLI_USE_RESULT);
}

function mysql_set_charset($charset, $link=null){
    $link = mysql_link($link);
    return mysqli_set_charset($link, $charset);
}

function mysql_get_host_info($link=null) {
    $link = mysql_link($link);
    return mysqli_get_host_info($link);
}

function mysql_get_proto_info($link=null) {
    $link = mysql_link($link);
    return mysqli_get_proto_info($link);
}
function mysql_get_server_info($link=null) {
    $link = mysql_link($link);
    return mysqli_get_server_info($link);
}

function mysql_info($link=null) {
    $link = mysql_link($link);
    return mysqli_info($link);
}

function mysql_get_client_info() {
    $link = mysql_link();
    return mysqli_get_client_info($link);
}

function mysql_create_db($db, $link=null) {
    $link = mysql_link($link);
    $db = str_replace('`', '', mysqli_real_escape_string($link, $db));
    return mysqli_query($link, "CREATE DATABASE `$db`");
}

function mysql_drop_db($db, $link=null) {
    $link = mysql_link($link);
    $db = str_replace('`', '', mysqli_real_escape_string($link, $db));
    return mysqli_query($link, "DROP DATABASE `$db`");
}

function mysql_list_dbs($link=null) {
    $link = mysql_link($link);
    return mysqli_query($link, "SHOW DATABASES");
}

function mysql_list_fields($db, $table, $link=null) {
    $link = mysql_link($link);
    $db = str_replace('`', '', mysqli_real_escape_string($link, $db));
    $table = str_replace('`', '', mysqli_real_escape_string($link, $table));
    return mysqli_query($link, "SHOW COLUMNS FROM `$db`.`$table`");
}

function mysql_list_tables($db, $link=null) {
    $link = mysql_link($link);
    $db = str_replace('`', '', mysqli_real_escape_string($link, $db));
    return mysqli_query($link, "SHOW TABLES FROM `$db`");
}

function mysql_db_query($db, $sql, $link=null) {
    $link = mysql_link($link);
    mysqli_select_db($link, $db);
    return mysqli_query($link, $sql);
}

function mysql_fetch_row($qlink) {
    return mysqli_fetch_row($qlink);
}

function mysql_fetch_assoc($qlink) {
    return mysqli_fetch_assoc($qlink);
}

function mysql_fetch_array($qlink, $result=MYSQLI_BOTH) {
    return mysqli_fetch_array($qlink, $result);
}

function mysql_fetch_lengths($qlink) {
    return mysqli_fetch_lengths($qlink);
}

function mysql_insert_id($qlink) {
    return mysqli_insert_id($qlink);
}

function mysql_num_rows($qlink) {
    return mysqli_num_rows($qlink);
}

function mysql_num_fields($qlink) {
    return mysqli_num_fields($qlink);
}

function mysql_data_seek($qlink, $row) {
    return mysqli_data_seek($qlink, $row);
}

function mysql_field_seek($qlink, $offset) {
    return mysqli_field_seek($qlink, $offset);
}

function mysql_fetch_object($qlink, $class="stdClass", array $params=null) {
    return ($params === null)
        ? mysqli_fetch_object($qlink, $class)
        : mysqli_fetch_object($qlink, $class, $params);
}

function mysql_db_name($qlink, $row, $field='Database') {
    mysqli_data_seek($qlink, $row);
    $db = mysqli_fetch_assoc($qlink);
    return $db[$field];
}

function mysql_fetch_field($qlink, $offset=null) {
    if ($offset !== null)
        mysqli_field_seek($qlink, $offset);
    return mysqli_fetch_field($qlink);
}

function mysql_result($qlink, $offset, $field=0) {
    if ($offset !== null)
        mysqli_field_seek($qlink, $offset);
    $row = mysqli_fetch_array($qlink);
    return (!is_array($row) || !isset($row[$field]))
        ? false
        : $row[$field];
}

function mysql_field_len($qlink, $offset) {
    $field = mysqli_fetch_field_direct($qlink, $offset);
    return is_object($field) ? $field->length : false;
}

function mysql_field_name($qlink, $offset) {
    $field = mysqli_fetch_field_direct($qlink, $offset);
    if (!is_object($field))
        return false;
    return empty($field->orgname) ? $field->name : $field->orgname;
}

function mysql_field_table($qlink, $offset) {
    $field = mysqli_fetch_field_direct($qlink, $offset);
    if (!is_object($field))
        return false;
    return empty($field->orgtable) ? $field->table : $field->orgtable;
}

function mysql_field_type($qlink, $offset) {
    $field = mysqli_fetch_field_direct($qlink, $offset);
    return is_object($field) ? $field->type : false;
}

function mysql_free_result($qlink) {
    try {
        mysqli_free_result($qlink);
    } catch (Exception $e) {
        return false;
    }
    return true;
}
280
ответ дан 15 August 2018 в 17:01
  • 1
    Есть еще одна вещь: я думаю, что функция по-прежнему существует в PHP только по одной причине - совместимость со старыми, устаревшими, но все еще запущенными CMS, электронной коммерцией, системами доски объявлений и т. Д. Наконец, она будет удалена, и вам придется переписать заявление... – Kamil 13 November 2012 в 17:49
  • 2
    @Kamil: Это правда, но на самом деле это не причина, почему вы не должны ее использовать. Причина не в том, чтобы использовать его, потому что он древний, небезопасный и т. Д. :) – Madara Uchiha♦ 13 November 2012 в 17:50
  • 3
    @Mario - у разработчиков PHP есть процесс, и они только что голосовали за формально устаревший ext / mysql от 5.5. Это уже не гипотетическая проблема. – SDC 10 December 2012 в 21:00
  • 4
    The old functions will allow executing of multiple statements per query - нет, они не будут. Такая инъекция невозможна с помощью ext / mysql - единственный способ, которым этот вид инъекции возможен с PHP, а MySQL - при использовании MySQLi и функции mysqli_multi_query(). Типичная инъекция, которая возможна с помощью ext / mysql и unescaped строк, - это такие вещи, как ' OR '1' = '1 для извлечения данных из базы данных, которая не должна была быть доступна. В некоторых ситуациях можно вводить подзапросы, однако до сих пор невозможно изменить базу данных таким образом. – DaveRandom 31 December 2012 в 02:58
  • 5
    Добавление нескольких дополнительных строк с проверенной техникой, такой как PDO или MySQLi, по-прежнему позволяет легко использовать PHP, который всегда предлагался. Я надеюсь, что разработчик знает, что видение этих ужасных функций mysql_ * в любом учебном пособии фактически умаляет урок и должно сказать OP, что этот код является soooo 10 лет назад, - и должен задать вопрос о том, актуальность учебника тоже! – FredTheWebGuy 31 December 2012 в 23:28
  • 6
    Какой ответ должен уместно упомянуть: подготовленное заявление убирает какое-либо значимое использование IN (...) construct. – Eugen Rieck 15 December 2013 в 01:36
  • 7
    Ваш ответ слишком длинный, а реальное резюме - «mysql ext is no more». Это все – Your Common Sense 7 September 2016 в 18:13
  • 8
    @YourCommonSense Мой ответ заключается в том, почему mysqli заменил mysql. Дело в том, что Mysqli существует сегодня, поэтому используйте его. Все это знают! – Ani Menon 7 September 2016 в 18:16
  • 9
    Ну, кроме того, что никто не спрашивал, почему mysqli заменил mysql, он тоже не отвечает на этот вопрос. Он отвечает, почему был введен mysqli. Но это не объясняет, почему mysql и mysqli не позволяли жить параллельно – Your Common Sense 7 September 2016 в 18:19
  • 10
    @YourCommonSense Также вопрос OP «Почему я должен использовать что-то еще, даже если они работают на моем сайте? & Quot; и именно по этой причине я указал на изменения и улучшения. Вы можете посмотреть на все другие ответы, которые они долго, поэтому я подумал, что я должен его обобщить. – Ani Menon 7 September 2016 в 18:23
  • 11
    Вместо того, чтобы показывать ссылку для своего решения, добавьте их здесь в качестве ответа. – amarnath 9 June 2017 в 10:07

Существует много причин, но, возможно, наиболее важным является то, что эти функции поощряют небезопасные методы программирования, поскольку они не поддерживают подготовленные заявления. Подготовленные утверждения помогают предотвратить атаки SQL-инъекций.

При использовании функций mysql_* вы должны помнить, чтобы запускать пользовательские параметры через mysql_real_escape_string(). Если вы забыли только в одном месте или если вам удалось избежать только части ввода, ваша база данных может подвергаться атаке.

Использование подготовленных операторов в PDO или mysqli сделает так, чтобы эти типы ошибок программирования сложнее сделать.

87
ответ дан 15 August 2018 в 17:01
  • 1
    К сожалению, плохая поддержка MySQLi_ * для передачи переменного количества параметров (например, когда вы хотите передать список значений для проверки в предложении IN) поощряет неиспользование параметров, поощряя использование точно таких же конкатенированных запросов, которые оставить MySQL_ * вызовом уязвимым. – Kickstart 27 June 2013 в 14:31
  • 2
    Но, опять же, неуверенность не является неотъемлемой проблемой функций mysql_ *, а проблемой неправильного использования. – Agamemnus 2 February 2014 в 11:29
  • 3
    @Agamemnus Проблема в том, что mysql_ * упрощает реализацию этого «неправильного использования», особенно для неопытных программистов. Библиотеки, реализующие подготовленные инструкции, усложняют этот тип ошибок. – Trott 2 February 2014 в 22:33

функции mysql_ * были обесценены (как и php 5.5), учитывая тот факт, что были разработаны лучшие функции и структуры кода. Тот факт, что функция была обесценена, означает, что в ее улучшение не будет добавлено больше усилий с точки зрения производительности и безопасности, что означает, что она менее надежна для будущего.

Если вам нужно больше причин:

Функции mysql_ * не поддерживают подготовленные операторы. Функции mysql_ * не поддерживают привязку параметров. Функции mysql_ * не имеют функциональности для объектно-ориентированного программирования. список продолжается ...
-7
ответ дан 15 August 2018 в 17:01
  • 1
    Этот ответ устарел. Кроме того, он не добавляет ничего полезного в ответы, которые уже существуют. – Your Common Sense 24 May 2016 в 09:22

Другие вопросы по тегам:

Похожие вопросы: