Каковы некоторые хорошие книги, веб-ресурсы и проекты для изучения R? [закрытый]

Используйте подготовленные операторы и параметризованные запросы. Это операторы SQL, которые отправляются и анализируются сервером базы данных отдельно от любых параметров. Таким образом, злоумышленник не может внедрить вредоносный SQL.

У вас в основном есть два варианта:

  1. Использование PDO (для любой поддерживаемый драйвер базы данных):
    $stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
    
    $stmt->execute(array('name' => $name));
    
    foreach ($stmt as $row) {
        // do something with $row
    }
    
  2. Использование MySQLi (для MySQL):
    $stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
    $stmt->bind_param('s', $name); // 's' specifies the variable type => 'string'
    
    $stmt->execute();
    
    $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
        // do something with $row
    }
    

Если вы подключаетесь к база данных, отличная от MySQL, есть вторая опция, зависящая от драйвера, к которой вы можете обратиться (например, pg_prepare() и pg_execute() для PostgreSQL). PDO является универсальной опцией.

Правильная настройка соединения

Обратите внимание, что при использовании PDO для доступа к базе данных MySQL real подготовленные операторы не используются по умолчанию. Чтобы исправить это, вы должны отключить эмуляцию подготовленных операторов. Пример создания соединения с использованием PDO:

$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');

$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

В приведенном выше примере режим ошибки не является строго необходимым, но рекомендуется добавить его. Таким образом, сценарий не остановится с Fatal Error, когда что-то пойдет не так. И это дает разработчику шанс catch получить любую ошибку (ы), которые являются throw n как PDOException s.

Однако обязательной является первая setAttribute() строка, которая сообщает PDO об отключении эмулируемых подготовленных операторов и использует подготовленные операторы real . Это гарантирует, что оператор и значения не будут разбираться с PHP перед отправкой на сервер MySQL (предоставление возможности злоумышленнику возможности внедрить вредоносный SQL).

Хотя вы можете установить charset в варианты конструктора, важно отметить, что «более старые» версии PHP (& lt; 5.3.6) молча игнорировали параметр charset в DSN.

Объяснение

Случается, что оператор SQL, который вы передаете prepare, анализируется и компилируется сервером базы данных. Указав параметры (либо ?, либо именованный параметр, такой как :name в примере выше), вы указываете механизм базы данных, в который вы хотите включить фильтр. Затем, когда вы вызываете execute, подготовленный оператор объединяется со значениями параметров, которые вы указываете.

Важно то, что значения параметров объединены с компилируемым оператором, а не с строкой SQL. SQL-инъекция работает, обманывая сценарий, включая вредоносные строки, когда он создает SQL для отправки в базу данных. Поэтому, отправляя фактический SQL отдельно от параметров, вы ограничиваете риск того, что закончите то, чего не намеревались. Любые параметры, которые вы отправляете при использовании подготовленного оператора, будут обрабатываться только как строки (хотя механизм базы данных может сделать некоторую оптимизацию, поэтому, конечно, параметры могут также оказаться как числа). В приведенном выше примере, если переменная $name содержит 'Sarah'; DELETE FROM employees, результатом будет просто поиск строки "'Sarah'; DELETE FROM employees", и вы не получите пустую таблицу .

Еще одно преимущество использования подготовленных операторов состоит в том, что если вы выполняете один и тот же оператор много раз в одном сеансе, он будет анализироваться и компилироваться один раз, давая вам некоторую прибыль от скорости.

О, и поскольку вы спросили, как это сделать для вставки, вот пример (с использованием PDO):

$preparedStatement = $db->prepare('INSERT INTO table (column) VALUES (:column)');

$preparedStatement->execute(array('column' => $unsafeValue));

Могут ли подготовленные операторы использоваться для динамических запросов?

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

Для этих конкретных сценариев лучше всего использовать фильтр белого списка, который ограничивает возможные значения.

// Value whitelist
// $dir can only be 'DESC' otherwise it will be 'ASC'
if (empty($dir) || $dir !== 'DESC') {
   $dir = 'ASC';
}

25
задан Community 23 May 2017 в 12:09
поделиться

9 ответов

Это - по существу дамп моих закладок, и что я имею на своем столе.

Начало работы:

  1. А учебное видео на John Cook R
  2. введение к R для программистов
  3. ссылочная карта R
  4. Интерактивное учебное руководство: Введение в Усовершенствованный R

:

  1. R-галерея
  2. R Wiki
  3. , Быстрый-R на усовершенствованной статистике

Книги:

  1. Книга R (Покрытия основы, классические тесты statisitical, основное статистическое моделирование (ANOVA, ANCOVA, GLM, нелинейные модели, и т.д.), усовершенствованное статистическое моделирование (древовидные модели, анализ временного ряда, пространственная статистика, анализ выживания, моделирование), и вертящий с выводом графических данных.
  2. Графика R (Как сделать графический взгляд R резким)
18
ответ дан Community 28 November 2019 в 20:58
поделиться

Вот сообщение в блоге, которое Brendan O'Connor просто записал сегодня, что это имеет некоторые подсказки для изучения R. Любовь это и ненависть это, R достигло совершеннолетия

кроме того, я рекомендация второго Jason "Книги R". Это дорого, но это более дешево, чем покупка нескольких других книг и быть разочарованным в них всех.

3
ответ дан John D. Cook 28 November 2019 в 20:58
поделиться

Всесторонняя Сеть Архива R кажется обещанием. Вот книжный список R , который является двумя ссылками далеко. Возможно [приблизительно 112] информация S-plus также делают вывод к R также.

2
ответ дан Yuval F 28 November 2019 в 20:58
поделиться

Несколько лет назад я использовал R в курсе статистики старшекурсника, который использовал современная Прикладная статистика с S-PLUS как его текст (что выпуск теперь распродан, но эта книга кажется эквивалентной).

R достаточно совместим с S в целом, что можно использовать много ресурсов S там.

3
ответ дан Anthony Rizk 28 November 2019 в 20:58
поделиться

проверьте ресурсы, упомянутые в этот более старый поток

2
ответ дан Community 28 November 2019 в 20:58
поделиться

Моя любимая книга R является R, Программирующим для Биоинформатики Robert Gentlemen. Это не пытается преподавать Вам статистику в то же время, что и Вы учите язык, а скорее представляет язык с точки зрения программиста. Я думал, что книга дала намного лучший фон, чем любой из ресурсов онлайн сделал. Это с точки зрения биолога/программиста, который не знал много статистики при первом изучении R.

4
ответ дан eleanorahowe 28 November 2019 в 20:58
поделиться

Я только что обнаружил сайт Rosetta Code который публикует проблемы и решения на нескольких языках параллельно. Он включает примеры R.

Он включает примеры R.

Он включает примеры R.

2
ответ дан 28 November 2019 в 20:58
поделиться

Эндрю Гельман из Колумбийского университета написал эту прекрасную книгу, которая содержит множество примеров и загружаемых файлов данных для дальнейшего изучения на основе представленных в книге концепций. текст ссылки

2
ответ дан 28 November 2019 в 20:58
поделиться

Канал #R на irc.freenode.net - хорошее место для вопросов. rseek.org также очень удобен, потому что в противном случае Google смешивает R с другими коннотациями

1
ответ дан 28 November 2019 в 20:58
поделиться
Другие вопросы по тегам:

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