mysql 의 mysql 데이터베이스 내의 user 테이블에서
update 쿼리를 잘못 날려서 debian-sys-maint의 비밀번호를 잊어버렸을 경우, 대처하는 방법.
배경 지식)
debian-sys-maint 계정은 기본적으로, mysql 데몬을 관리함.
/etc/init.d/mysql 스크립트를 start, stop, restart 등을 할 때
/etc/mysql/debian.cnf의 debian-sys-maint 계정과 암호를 사용.
debian.cnf 파일의 password 부분은 encryption된 것이 아니라 그냥 clear-text.
해결 방법)
즉, debian.cnf 파일의 password 부분을 임의의 문자열로 변경하고,
mysql> update user set password = password('랜덤스트링') where user = 'debian-sys-maint'
mysql> flush privileges;
를 하면 됨.
아래 예제 소스에서 굵게 표시한 부분에 주의하면 해결된다.
1. 데이터베이스를 만들 때 utf8로 설정
2. 테이블을 만들 때 utf8로 설정
3. 쿼리를 날리기 전에 "set names 'utf8'" 쿼리 먼저 날리기(select할 때 등도 포함)
참고 : http://php.net/manual/en/function.mysql-client-encoding.php
$query = "create database grade CHARACTER SET utf8 COLLATE utf8_general_ci";
mysql_query($query) or die (mysql_error());
$db_status = mysql_select_db('grade');
mysql_query("set names 'utf8'"); // it's important thing.
form태그 하위에 input 태그로 생성된 radio 버튼들이 있다고 하자.
그 radio 버튼을 선택했을 때, 다른 input 태그들이 나타나게 하고 싶다.
그럴 때는 input 태그의 버튼을 눌렀을 때, javascript 함수가 호출되게 하고,
그 javascript 함수에서 get 방식으로 인자를 넣어 다시 그 페이지를 호출하면 된다.
나타나게 하는 것은 php를 이용했다.
반환형이 void가 아닌 함수에서 함수의 끝이 되어 종료 될 때까지 반환하지 않을 경우,
마지막에 호출한 함수의 반환값을 따로 저장하지 않더라도 그 값을 반환하게 된다.
주석으로 여기 !!!!!!! 라고 표시한, return prime(n, ++divisior)부분을
prime(n, ++divisior)로 바꾸면 n이 소수일 때, 반환값 1이 별도로 반환하지 않더라도 반환된다.
또한, pritf("123\n");의 주석을 풀면 그 반환값인 4가 별도로 반환하지 않더라도 반환된다.
return을 지워도 .. 정상적으로 동작하긴 하지만,
반환형이 void가 아닌 재귀함수에서는 return을 명시적으로 하는 것이 옳다.
환경) Ubuntu Linux, vi editor, gcc complier
예제)
#include <stdio.h>
int prime(int n, int divisor)
{
if(divisor<=(n/2))
{
if(n%divisor != 0)
{
printf("call n:%d, divisor : %d\n", n, divisor);
return prime(n, ++divisor); // 여기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// printf("123\n");
}
else
{
printf("0.n : %d, divisor : %d\n", n, divisor);
return 0; // 소수가 아니다.
}
}
else
{
printf("1.n : %d, divisor : %d\n", n, divisor);
return 1; // 소수이다.
}
}
class A {
private:
int a;
public:
void b()
{
A test;
test.a = 1;
cout << test.a << endl;
}
};
void main()
{
A a;
a.b();
}
a라는 객체에서 test라는 객체의 private 변수에 접근이 가능하다.
따라서, private 한정자는 class 단위이다.
이와 관련하여, 상속받은 상위 클래스의 private 한정자들은
하위 클래스가 상속을 받았더라도 다른 클래스이므로 private 변수에 접근할 수 없다.
상위 클래스에서 private가 아닌 protected 한정자를 사용하거나
하위 클래스에서 상위 클래스의 생성자를 이용하여 private 변수에 접근하는 수 밖에 없다.