티스토리 툴바


#> find ./ -user user1 -exec chown user2.grp2 {} \;
Posted by @52c
    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);


Posted by @52c
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>
Posted by @52c
mysqldump -h 'host address' -uuser -p'password'  --opt --compress db_name table1 table2 | mysql -uuser -p'password' db_name

Posted by @52c
각 저자별로 저술한 책의 목록을 컴마로 구분하여 출력

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

Posted by @52c
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');
Posted by @52c
TAG MySQL