Содержание
Различные решения PHP
Проблема IP в PHP
IPv4 следует хранить как INT UNSIGNED NOT NULL.
Проблема: в модуле голосования есть проблемы с IP голосующих, так как php не понимает беззнаковые числа.
Решение 1.
Because PHP's integer type is signed, and many IP addresses will result in negative integers on 32-bit architectures, you need to use the «%u» formatter of sprintf() or printf() to get the string representation of the unsigned IP address.
То есть следует использовать sprintf('%u', $ip)
или printf('%u', $ip)
.
Решение 2. На уровне MySQL есть функции INET_ATON()
и INET_NTOA()
- то есть от ip2long()
возможно вообще отказаться:
$query = "INSERT INTO ... INET_ATON('".addslashes($_SERVER['REMOTE_ADDR'])."')";
Версия для печати
Ссылка на версию для печати:
Сохранение массива в БД через array_map
- save.php
public function save($data) { $wrapApostrophe = function($elm) { return '`'.$elm.'`'; }; $wrapSlashes = function($elm) { return "'".addslashes($elm)."'"; }; $q1 = implode(', ', array_map($wrapApostrophe, array_keys($data))); $q2 = implode(', ', array_map($wrapSlashes, array_values($data))); $query = "INSERT INTO `{$this->options->table}` ($q1) VALUES ($q2)"; $this->db->Query($query); }
Редукция массива через array_reduce
- array_reduce.php
$array = array( 0 => array('id' => 1, 'section_id' => 1), 1 => array('id' => 2, 'section_id' => 2), 2 => array('id' => 3, 'section_id' => 2), 3 => array('id' => 3, 'section_id' => 3), ); function reduceCallback($result, $item) { $result[] = $item['section_id']; return $result; } $result = array_reduce($array, 'reduceCallback', array()); echo var_dump($result);
Простой парсинг RSS
- parse-rss.php
$url = 'http://medportal.ru/news/rss/'; //адрес RSS ленты $rss = simplexml_load_file($url); // Интерпретирует XML-файл в объект $queryData = array(); // формирование данных для вставки foreach($rss->channel->item as $item) { $guid = md5($item->guid); $title = addslashes($item->title); $description = addslashes($item->description); $category = addslashes($item->category); $pubDate = addslashes(strftime("%Y-%m-%d %H:%M:%S", strtotime($item->pubDate))); $link = addslashes($item->link); $queryData[] = "('$guid', '$title', '$description', '$category', '$pubDate', '$link', 1)"; } // вставка данных (первичный ключ id, по автоинкрименту, для предотвращения дублирования рассчитывается md5 от guid) $query = "INSERT IGNORE INTO `external_rss` (`guid`, `title`, `description`, `category`, `pubDate`, `link`, `is_active`) VALUES ".implode(', ', $queryData); $db->Query($query);