#> find ./ -user user1 -exec chown user2.grp2 {} \;
function drawLotsNoOverlap($src, $num) {
if(! is_array($src)) return false;
$buff = array();
$num_src = count($src);
for($i=0; $i<$num_src; $i++) {
$_key = $src[$i];
$_val = rand(0, 100000);
$buff[$_key] = $_val;
}
arsort($buff);
reset($buff);
$ret = array();
for($i=0; $i<$num; $i++) {
array_push($ret, key($buff));
next($buff);
}
return $ret;
}
$src = range(1, 49); ## 1~49의 원소를 갖는 배열
$lot = drawLotsNoOverlap($src, 6); ## 이 중 6개 추출
sort($lot); ## 정렬
print_r($lot);
$buff = array();
$num_src = count($src);
for($i=0; $i<$num_src; $i++) {
$_key = $src[$i];
$_val = rand(0, 100000);
$buff[$_key] = $_val;
}
arsort($buff);
reset($buff);
$ret = array();
for($i=0; $i<$num; $i++) {
array_push($ret, key($buff));
next($buff);
}
return $ret;
}
$src = range(1, 49); ## 1~49의 원소를 갖는 배열
$lot = drawLotsNoOverlap($src, 6); ## 이 중 6개 추출
sort($lot); ## 정렬
print_r($lot);
1. clear_injection.php
//Script Injection 방어!!!!!---------------------------------------------------//
function _clearInjection(&$val, $key) {
if(is_array($val)) {
array_walk($val, '_clearInjection');
} else {
$val = htmlspecialchars($val, ENT_QUOTES);
}
}
if(count($_GET)) array_walk($_GET, '_clearInjection');
if(count($_POST)) array_walk($_POST, '_clearInjection');
//-----------------------------------------------------------------------------//
- 모든 $_GET과 $_POST value 에 대해 htmlspecialchars() 를 적용함..
- $_GET 이나 $_POST로 넘어온 값이 그대로 출력되는 로직이 있을 경우, URL에서 <script>...</script> 따위를 입력하더라도 실행되지 않도록 함..
2. 모든 스크립트에서 실행하게 하려면..
httpd.conf 수정 :
<VirtualHost>
...
php_value auto_prepend_file /path/to/file/clear_injection.php
</VirtualHost>
//Script Injection 방어!!!!!---------------------------------------------------//
function _clearInjection(&$val, $key) {
if(is_array($val)) {
array_walk($val, '_clearInjection');
} else {
$val = htmlspecialchars($val, ENT_QUOTES);
}
}
if(count($_GET)) array_walk($_GET, '_clearInjection');
if(count($_POST)) array_walk($_POST, '_clearInjection');
//-----------------------------------------------------------------------------//
- 모든 $_GET과 $_POST value 에 대해 htmlspecialchars() 를 적용함..
- $_GET 이나 $_POST로 넘어온 값이 그대로 출력되는 로직이 있을 경우, URL에서 <script>...</script> 따위를 입력하더라도 실행되지 않도록 함..
2. 모든 스크립트에서 실행하게 하려면..
httpd.conf 수정 :
<VirtualHost>
...
php_value auto_prepend_file /path/to/file/clear_injection.php
</VirtualHost>
mysqldump -h 'host address' -uuser -p'password' --opt --compress db_name table1 table2 | mysql -uuser -p'password' db_name
각 저자별로 저술한 책의 목록을 컴마로 구분하여 출력
SELECT writer, GROUP_CONCAT(DISTINCT book_title ORDER BY book_title SEPARATOR ',') AS book
FROM book_list
GROUP BY writer
단, GROUP_CONCAT 으로 출력되는 리스트에는 조건절을 추가할 수 없으므로, 최근 1년간 저술한 책의 제목만 출력하려면 다음과 같이 한다.
SELECT writer, GROUP_CONCAT(DISTINCT book_title ORDER BY book_title SEPARATOR ',') AS book
FROM
(SELECT writer, book_title FROM book_list WHERE reg_date >= curdate() - interval 1 year) b
GROUP BY writer
SELECT writer, GROUP_CONCAT(DISTINCT book_title ORDER BY book_title SEPARATOR ',') AS book
FROM book_list
GROUP BY writer
단, GROUP_CONCAT 으로 출력되는 리스트에는 조건절을 추가할 수 없으므로, 최근 1년간 저술한 책의 제목만 출력하려면 다음과 같이 한다.
SELECT writer, GROUP_CONCAT(DISTINCT book_title ORDER BY book_title SEPARATOR ',') AS book
FROM
(SELECT writer, book_title FROM book_list WHERE reg_date >= curdate() - interval 1 year) b
GROUP BY writer
CREATE TABLE IF NOT EXISTS `sequence` (
`name` varchar(24) NOT NULL,
`step` int(4) NOT NULL default '1',
`last_val` int(16) unsigned NOT NULL default '0',
PRIMARY KEY (`name`)
);
DELIMITER $$
CREATE DEFINER=`user`@`%` FUNCTION `get_sequence`(seq_name VARCHAR(24)) RETURNS int(4)
BEGIN
UPDATE sequence SET last_val=@val:=last_val+step WHERE name=seq_name;
RETURN @val;
END$$
ex ) select get_sequence('my_sequence');
`name` varchar(24) NOT NULL,
`step` int(4) NOT NULL default '1',
`last_val` int(16) unsigned NOT NULL default '0',
PRIMARY KEY (`name`)
);
DELIMITER $$
CREATE DEFINER=`user`@`%` FUNCTION `get_sequence`(seq_name VARCHAR(24)) RETURNS int(4)
BEGIN
UPDATE sequence SET last_val=@val:=last_val+step WHERE name=seq_name;
RETURN @val;
END$$
ex ) select get_sequence('my_sequence');
TAG MySQL


