■ PHP 의미 , 장점
PHP ?
1. 서버 측에서 실행되는 프로그래밍 언어로 HTML을 프로그래밍적으로 생성해주고, 데이터베이스와 상호작용 하면서 데이터를 저장하고, 표현
2. 웹을 위해서 만들어졌고, 지금도 웹을 위해서 발전하고 있는 웹을 위한 언어
3. Personal Home Page Tools 의 약자에서 PHP:Hypertext Preprocessor 로 의미가 변경
PHP 장점
1. 웹에 최적화된 언어
2. 웹 개발에 필요한 수많은 로직들이 함수의 형태로 미리 제공됨
3. 거의 모든 데이터베이스를 지원
4. 가장 많은 공개 소프트웨어가 PHP로 만들어짐
◆ 문자열 (String)
문자들을 표현할때 사용하며, 메모리 공간의 제약이 없다.
즉, 문자열의 길이에 상관없이 제한 없는 문자열을 지원한다.
문자열은 큰따옴표("), 작은따옴표(')를 이용하여 할당할 수 있다.
1. 큰따옴표
"Hello $str" 와 같이 큰따옴표 사이에 문자열을 써넣으면 PHP는 문자열을 해석하는 절차를 거친다.
큰따옴표 내부에 변수가 있다는 이는 변수의 값을 출력한다.
<?php
$str = 'World';
echo "Hello <br>"; //Hello
echo "Hello $str"; //Hello World
?>
== 출력 내용 ==
Hello
Hello World
2. 작은따옴표
작은따옴표 안에서는 변수가 허용되지 않는다.
작은따옴표는 문자열 해석절차를 거치지 않기때문에 큰따옴표보다 성능의 우위를 점하나 큰 차이가 있는 것은 아니다.
<?php
$str = 'World';
echo 'Hello <br>'; //Hello
echo 'Hello $str'; //Hello World
?>
== 출력 내용 ==
Hello
Hello $str
3. 문자열 합치기
<?php
$str = 'World';
echo 'Hello '.$str.'<br>';
echo "Hello ".$str."<br>";
?>
== 출력 내용 ==
Hello World
Hello World
4. 변수의 해석
큰따옴표와 Heredoc 문법에서는 문자열 내부의 변수를 해석하여 처리하는데 이는 이어지는 문자열에 따라 예상밖의 결과를 초래하기도 한다.
이를 안전하게 처리하기 위해 변수를 {}를 이용해 감싸는 방식이 추천된다.
<!-- 한글이 깨질 경우 -->
<meta charset="utf-8">
<?php
$money = "1000";
echo "수입이 $money 발생하였다.<br>"; //수입이 1000 발생하였다.
echo "수입이 $money원 발생하였다.<br>"; //$money원 이라는 변수를 찾기에 올바르지 않다.
echo "수입이 $money 원 발생하였다.<br>"; //수입이 1000 원 발생하였다.
echo "수입이 {$money}원 발생하였다.<br>"; //수입이 1000원 발생하였다.
?>
== 출력 내용 ==
수입이 1000 발생하였다.
수입이 발생하였다.
수입이 1000 원 발생하였다.
수입이 1000원 발생하였다.
5. 기타
<?php echo "XHTML나 XML 문서와 호환시키거나 구분할 때 이렇게 쓰세요"; ?>
<? echo "이런 형태가 기본 처리명령입니다"; ?>
<script language="php">
echo '어떤 에디터는 이러한 방법을 좋아하지 않습니다';
</script>
<? $str = "변수 값을 출력을 해 봅시다."; ?>
<? echo $str ?>
<? echo $str; ?>
<?= $str ?>
<?= $str; ?>
◆ 변수명 규칙
PHP에서 변수명은 아래에서 제시하는 변수명 규칙을 따르며, 이를 어긴다면 오류가 발생한다.
1) 변수명은 반드시 $(달러표시)로 시작해야 한다.
2) 변수명은 적어도 하나 이상의 문자를 가져야 한다.
3) $ 표시 다음에 오는 첫 번째 문자는 알파벳이거나 _(언더바)여야 한다.
4) $와 _를 제외한 모든 특수문자와 빈칸은 변수명에 포함되면 안된다.
<?
$name //유효한 변수선언
$_name //유효한 변수선언
$nick_name //유효한 변수선언
nick_name //달러표시로 시작하지 않아 유효하지 않음
$1_name //첫문자 숫자사용으로 유효하지 않음
$nick-name //특수문자사용으로 유효하지 않음
$nick_name more //빈칸이 포함되어 유효하지 않음
$this //$this는 특수 변수로, 할당할 수 없어 유효하지 않음
?>]
※ editplus , alftp 다운로드 ( 구버전 )
01. editplus - 4버전
https://editplus.com/kr/latest4.html
02. alftp - 5.33버전
https://gbworld.tistory.com/767#google_vignette
※ apmsetup ( Apache + PHP + Mysql ) 설치
02 Apache + PHP + MySQL : 설치 프로그램
① Apache 2.0
② PHP Version 5.2.12
③ MySQL server version 5.1.41
03 제어판 > 시스템 및 보안 > 관리 도구 > 서비스 [더블 클릭]
04 이클립스를 통해 [웹 서버 및 디비] 구동 시 충돌이 발생한다면 위의 두 서비스를 종료 후 실행
※ PHP 참고 사이트
◆ 변수의 범위
<?
$a = 1; //전역변수
function test() {
echo $a; //지역변수
}
test(); //출력할 값이 없음
?>
== 설명 ==
전역 변수는 스크립트 내에서 정의된 변수로 스크립트 내에서 사용할 수 있지만 함수 안에서는 사용할 수 없다.
<?
function test1() {
$a = 2; //지역변수 초기화 선언
echo $a;
}
test1(); //2 출력
?>
<?
function test2() {
global $a; // 함수 내에서 사용할 전역 변수를 명시함
echo $a;
}
test2(); //1 출력
?>
<?
function test3() {
$b = 0;
echo $b;
$b++;
}
test3(); //0 출력
test3(); //0 출력
test3(); //0 출력
?>
== 설명 ==
함수 안에서 사용된 변수는 함수가 끝나면 삭제된다.
<?
function test4() {
static $c = 0;
echo $c;
$c++;
}
test4(); //0 출력
test4(); //1 출력
test4(); //2 출력
?>
== static 설명 ==
함수 안에서 사용된 변수의 값을 유지하기 위해서 static 키워드를 사용한 정적 변수로 선언할 수 있다.
◆ 주석 처리
<?
// 주석
////////////////////
// 주석 //
////////////////////
/*
주석
주석
주석
*/
# 주석
##################
## 주석 ##
##################
?>
◆ 참조, 비교, 논리, 형 연산자
1. 참조 연산자
<?
$a = 5;
$b = $a;
$a = 7; // $a=7, $b=5
$a = 5;
$b = &$a; // 참조연산자
$a = 7; // $a, $b 모두 7
// $a와 $b는 같은 메모리 위치를 가리키고 있다.
unset($a); // $a값이 없어진다. $b=7은 유지된다.
?>
2. 비교 연산자
<?
// >, <, >=, <= 는 생략
// == : 등위
// === : 동일
// != : 같지 않다
// !== : 동일하지 않다
// <> : 같디 않다 ( != 동일 )
$c = 1; //int
$d = true; //boolean >> true=1, false=0
if($c == $d){
echo "value 같다";
}else{
echo "value 다르다";
}
if($c === $d){
echo "type 과 value 둘다 동일하다";
}else{
echo "동일하지 않다";
}
?>
3. 논리 연산자
NOT : !
AND : && , and
OR : || , or
4. 형 연산자
<?
$number = 1234567.888;
$a = number_format($number); //정수처리, 3자리 마다 쉼표처리
$b = number_format($number,1); //소수점 1자리 표시 (2자리에서 반올림처리)
?>
static = 메모리에 할당된 값 날리지 않고 저장
global = 전역처리된 값을 메서드에서 초기화 안시켜도 쓸 수 있께해줌
& = $a의 메모리주소에 저장된 마지막값을 가져오게함
DB도 charset 처리해줘야한다.
◆ if 조건문
<?
$num = 15;
// if
if($num > 10){
echo "참";
}
echo "<br>";
// if, else 방법1
if($num > 10){ //num변수가 10보다 크다면
echo "숫자 {$num}는 10보다 크다";
}else{ //위 조건의 나머지 (num변수가 10보다 작거나 같다면)
echo "10보다 작거나 같다";
}
echo "<br>";
// if, else 방법2
if($num > 10): echo "숫자 ".$num."는 10보다 크다";
else: echo "10보다 작거나 같다";
endif;
echo "<br>";
// if, else if, else
$number = 0;
if($number > 0){
echo "양수";
}else if($number == 0){
echo "0";
}else{
echo "음수";
}
?>
◆ switch 조건문
<?
$str = "남"; //남,여
switch($str){
case "남" :
echo "남자다.";
break;
case "여" :
echo "여자다.";
break;
default :
echo "성별이 없다.";
}
?>
== 설명 ==
switch문은 case문의 조건이 참인 경우 그 이하 case문과 default문까지 실행을 하도록 되어 있다.
이하 case문과 default문이 실행되지 않도록 하기 위해서는 break문을 사용하여 다음 소스를 실행하지 않도록 명시하여야 한다.
◆ for 반복문
<?
//기본
for($count=1; $count<=9 ; $count++){ // $count 를 1로 초기화 하고
echo $count;
echo "<br>";
}
//변수 2개 처리
for($i=1,$j=1; $i+$j<=10; $i++,$j++){
echo $i." + ".$j." = ".($i + $j);
echo "<br>";
}
// 구구단 2단
$gugudan = 2;
for($count=1; $count<=9 ; $count++){
echo $gugudan." * ".$count." = ".$gugudan * $count;
echo "$gugudan * $count = ".$gugudan * $count; //문자열에 변수 적용 ( 변수와 문자열이 떨어져 있을 경우 )
echo "<br>";
}
// 중첩
for($dan=2; $dan<=9; $dan++){
for($i=1; $i<=9; $i++){
echo "{$dan}*{$i} = ".$dan*$i."<br>"; //문자열에 변수 적용 ( {변수}와 문자열이 붙어 있을 경우 )
}
}
?>
◆ while 반복문
<?
//for 기본
for($count=1; $count<=9 ; $count++){ // $count 를 1로 초기화 하고
echo $count;
echo "<br>";
}
echo "=============<br>";
//while
$count = 0;
while(++$count <= 9){ // $count 값을 1증가시키고 9보다 작거나 같은지 확인한다.
echo $count."<br>";
}
echo "=============<br>";
$count = 0;
while($count++ < 9){ // $count 값이 9보다 작은지 확인 후 1증가 시킨다.
echo $count."<br>";
}
echo "=============<br>";
$count = 1;
while($count <= 9){ // $count 값이 9보다 작거나 같은지 확인한다.
echo $count."<br>";
$count++; // $count 값을 1증가
}
echo "=============<br>";
//for 변수 2개 처리
for($i=1,$j=1; $i+$j<=10; $i++,$j++){
echo $i." + ".$j." = ".($i + $j);
echo "<br>";
}
echo "=============<br>";
//while
$i = 1;
$j = 1;
while($i+$j<=10){
echo $i." + ".$j." = ".($i + $j);
echo "<br>";
$i++;
$j++;
}
echo "=============<br>";
//for 구구단 2단
$gugudan = 2;
for($count=1; $count<=9 ; $count++){
echo $gugudan." * ".$count." = ".$gugudan * $count;
echo " ($gugudan * $count = ".$gugudan * $count.")"; //문자열에 변수 적용 ( 변수와 문자열이 떨어져 있을 경우 )
echo "<br>";
}
echo "=============<br>";
//while
$count=1;
while($count<=9){
echo $gugudan." * ".$count." = ".$gugudan * $count;
echo "<br>";
$count++;
}
echo "=============<br>";
//for 중첩
for($dan=2; $dan<=9; $dan++){
for($i=1; $i<=9; $i++){
echo "{$dan}*{$i} = ".$dan*$i."<br>"; //문자열에 변수 적용 ( {변수}와 문자열이 붙어 있을 경우 )
}
}
echo "=============<br>";
//while
$dan=2;
while($dan<=9){
$i=1;
while($i<=9){
echo "{$dan}*{$i} = ".$dan*$i."<br>";
$i++;
}
$dan++;
}
?>
<?
//for 기본
for($count=1; $count<=9 ; $count++){ // $count 를 1로 초기화 하고
echo $count;
echo "<br>";
}
echo "=============<br>";
//do while
$count = 1;
do{
echo $count."<br>";
}while(++$count <= 9);
echo "=============<br>";
//for 변수 2개 처리
for($i=1,$j=1; $i+$j<=10; $i++,$j++){
echo $i." + ".$j." = ".($i + $j);
echo "<br>";
}
echo "=============<br>";
//do while
$i = 1;
$j = 1;
do{
echo $i." + ".$j." = ".($i + $j);
echo "<br>";
$i++;
$j++;
}while($i+$j<=10);
echo "=============<br>";
//for 구구단 2단
$gugudan = 2;
for($count=1; $count<=9 ; $count++){
echo $gugudan." * ".$count." = ".$gugudan * $count;
echo " ($gugudan * $count = ".$gugudan * $count.")"; //문자열에 변수 적용 ( 변수와 문자열이 떨어져 있을 경우 )
echo "<br>";
}
echo "=============<br>";
//do while
$count=1;
do{
echo $gugudan." * ".$count." = ".$gugudan * $count;
echo "<br>";
$count++;
}while($count<=9);
echo "=============<br>";
//for 중첩
for($dan=2; $dan<=9; $dan++){
for($i=1; $i<=9; $i++){
echo "{$dan}*{$i} = ".$dan*$i."<br>";
}
}
echo "=============<br>";
//do while
$dan=2;
do{
$i=1;
do{
echo "{$dan}*{$i} = ".$dan*$i."<br>";
$i++;
}while($i<=9);
$dan++;
}while($dan<=9);
?>
◆배열
1. 배열
<?
// 인덱스(index)는 자동적으로 할당 (0 부터 시작)
$cars = array("현대","기아","삼성");
echo "I like ".$cars[0].", ".$cars[1]." and ".$cars[2];
echo "<br>";
// for문 이용해서 출력
$arrlength = count($cars); // $cars 배열의 길이값
for($i=0;$i<$arrlength;$i++) {
echo $cars[$i];
echo "<br>";
}
?>
2. 연계 배열(Associative Arrays)
<?
// 연계 배열은 값을 할당하는데 이름 키(named keys)를 사용하는 배열이다.
$age = array("Park"=>"35","Lee"=>"37","Kim"=>"43");
//or
$age['Park']="35";
$age['Lee']="37";
$age['Kim']="43";
// 연계 배열의 모든 값들을 반복하여 출력하려면, 다음과 같이 foreach 루프를 사용할 수 있다.
foreach($age as $x=>$y_value) {
echo "key = ".$x.", value = ".$y_value;
echo "<br>";
}
?>
3. 2차원 배열
<?
$cars = array(
array("현대",2019,2),
array("기아",2018,3),
array("BMW",2017,4)
);
echo $cars[0][0]." - ".$cars[0][1]." - ".$cars[0][2]."<br>";
echo $cars[1][0]." - ".$cars[1][1]." - ".$cars[1][2]."<br>";
echo $cars[2][0]." - ".$cars[2][1]." - ".$cars[2][2]."<br>";
for ($i = 0; $i < 3; $i++) {
echo "<p><b>Index : $i</b></p>";
echo "<ul>";
for ($j = 0; $j < 3; $j++) {
echo "<li>".$cars[$i][$j]."</li>";
}
echo "</ul>";
}
?>
● 페이지 호출 시간 측정
<?
echo microtime();
?>
0.07563600 1199169216 <- 이러한 숫자 형태로 출력 된다.
1970년 1월 1일 0시 0분 0초 기준으로 몇초가 흘렀는지를 나타낸다.
이는 한 자리의 공백을 띄우고 두개의 수가 출력되는 것을 볼 수 있다.
각각 마이크로 seconds와 Unix timestamp (sec 단위)가 나오는 것이라고 한다.
<?
// 페이지 호출 시작 시간
$start = microtime();
$str = explode(" ",$start);
$start = $str[0] + $str[1];
?>
내용 부분
<?
// 페이지 호출 종료 시간
$end = microtime();
$estr = explode(" ",$end);
$end = $estr[0] + $estr[1];
?>
<?
// 호출 시간 계산
$enc_time = number_format(($end-$start),8);
?>
<?=$enc_time?>
◆ $_SERVER 함수
$_SERVER['DOCUMENT_ROOT'] : 현재 사이트가 위치한 서버상의 위치 = /dancepkt/www
$_SERVER['REMOTE_ADDR'] = 사이트 접속한 사용자 IP = xxx.xxx.xxx.xxx
$_SERVER['SCRIPT_FILENAME'] = 실행되고 있는 위치와 파일명 = /dancepkt/www/index.php
$_SERVER['SERVER_NAME'] = 사이트 도메인 = dancepkt.cafe24.com
$_SERVER['REQUEST_URI'] = 현재페이지의 주소에서 도메인 제외 = /index.php
$_SERVER['PHP_SELF'] = 현재페이지의 주소에서 도메인과 넘겨지는 값 제외 = /index.php
$_SERVER['HTTP_ACCEPT_ENCODING'] = 인코딩 방식
$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 언어 = ko
$_SERVER['HTTP_USER_AGENT'] = 사이트 접속한 사용자 환경
$_SERVER['SERVER_PORT'] = 사이트가 사용하는 포트 = 80
$_SERVER['SERVER_SOFTWARE'] = 서버의 소프트웨어 환경 = Apache
$_SERVER['GATEWAY_INTERFACE'] = cGI 정보 = CGI1.1
$_SERVER['SERVER_PROTOCOL'] = 사용된 서버 프로토콜 = HTTP1.1
<?
echo '$_SERVER["DOCUMENT_ROOT"] : '.$_SERVER['DOCUMENT_ROOT']."<br>";
echo '$_SERVER["REMOTE_ADDR"] : '.$_SERVER['REMOTE_ADDR']."<br>";
echo '$_SERVER["SCRIPT_FILENAME"] : '.$_SERVER['SCRIPT_FILENAME']."<br>";
echo '$_SERVER["SERVER_NAME"] : '.$_SERVER['SERVER_NAME']."<br>";
echo '$_SERVER["REQUEST_URI"] : '.$_SERVER['REQUEST_URI']."<br>";
echo '$_SERVER["PHP_SELF"] : '.$_SERVER['PHP_SELF']."<br>";
?>
◆ include(), include_once(), require(), require_once() 함수
1. include()
같은 파일 여러 번 포함 가능 / 포함할 파일이 없어도 다음 코드 실행
2. include_once()
같은 파일 한 번만 포함 / 포함할 파일이 없어도 다음 코드 실행
3. require()
같은 파일 여러 번 포함 가능 / 포함할 파일이 없으면 다음 코드 실행하지 않음
4. require_once()
같은 파일 한 번만 포함 / 포함할 파일이 없으면 다음 코드 실행하지 않음
== a.php 파일 생성후 내용 추가 ==
<h1>a.php 내용 입니다.</h1>
== test.php 파일 생성후 내용 추가 후 실행 ==
<h3>include 시작</h3>
<? include_once "a.php"; //실행 ?>
<? include "a.php"; //실행 ?>
<? include "a.php"; //실행 ?>
<? include "b.php"; //포함할 파일이 없어도 다음 코드 실행 ?>
<? include_once "a.php"; //위에서 이미 실행 되었기에 실행 안됨 ?>
<h3>require 시작</h3>
<? require "a.php"; //실행 ?>
<? require "a.php"; //실행, 같은 파일 여러 번 포함 가능?>
<? require_once "a.php"; //위에서 이미 실행 되었기에 실행 안됨 ?>
<? require_once "b.php"; //포함할 파일이 없으면 다음 코드 실행하지 않음 ?>
<h3>끝</h3>
◆ include $DOCUMENT_ROOT.() 함수
<?=$_SERVER['DOCUMENT_ROOT']; //서버상의 위치 ?>
<? include $DOCUMENT_ROOT.("/dancepkt/www/a.php"); //cafe24.com 절대경로 처리 ?>
<? include $DOCUMENT_ROOT.("/dancepkt/www/a.php"); //절대경로 처리 ?>
<?
// 경로상 변수 처리
$addr = $_SERVER['DOCUMENT_ROOT'];
include $DOCUMENT_ROOT.("{$addr}/a.php");
?>
◆ 상수 정의/선언/사용 방법
상수는 변수와 비슷하지만, 한번 값을 대입하면 변경할 수 없습니다.
읽기 전용 변수라고도 할 수 있습니다.
값이 변경되면 위험한 경우나, 기억하기 힘든 값에 간단한 이름을 붙이고 싶을 때 유용합니다.
상수를 정의하려면, define 함수를 사용합니다.
ex) define("상수명", "값");
상수명은 대문자 알파벳으로 만드는 것이 관례이고, 띄어쓰기는 밑줄(언더스코어)문자인 "_"를 사용합니다.
<?
define("NUMBER_ONE", 1);
define("NUMBER_TWO", 2);
define("PI", 3.14);
define("HI", "안녕하세요", true);
//define() 함수의 3번째 인수에 true 를 지정하면, 상수명의 대소문자를 구분하지 않습니다.
//기본적으로는 상수명의 대소문자를 구분합니다.
echo NUMBER_ONE."<br>"; // 출력 결과: 1
echo NUMBER_ONe."<br>"; // 출력 결과: NUMBER_ONe
echo NUMBER_ONE + NUMBER_TWO."<br>"; // 출력 결과: 3
echo PI * NUMBER_TWO."<br>"; // 출력 결과: 6.28
echo HI . "<br>"; // 출력 결과: 안녕하세요
echo Hi . "<br>"; // 출력 결과: 안녕하세요
echo hI . "<br>"; // 출력 결과: 안녕하세요
echo hi . "<br>"; // 출력 결과: 안녕하세요
?>
● 데이터베이스 연결설정
<?
##### 데이터베이스 연결설정 인자 (서버명, 사용자명, 비밀번호, 데이터베이스명)
$host= "localhost";
$user= "1111";
$password= "1111";
$db= "test";
##### 데이터베이스에 연결한다.
$conn = @mysql_connect($host,$user,$password);
if(!$conn) {
echo "데이터베이스 연결실패";
exit;
}
##### 작업대상 데이터베이스를 선택한다.
$dbnum = mysql_select_db($db);
if(!$dbnum) {
echo "데이터베이스 선택실패";
exit;
}
?>
https://nittaku.tistory.com/375
◆ 세션 (session)
세션을 등록하기 위해서는 가장먼저 세션을 초기화 하여 세션을 생성하고,
현재의 세션 아이디를 활성화시키기 위해 session_start()함수를 사용한다.
<?
session_start(); // 세션을 초기화 합니다. (세션을 쓰겠다라고 알려주는 역활)
session_id(); // 랜덤 26자리 제공
$_SESSION['변수명'] // 세션을 등록 합니다.
?>
<?
//모든 변수의 세션 삭제 처리
session_unset();
//변수 하나 세션 삭제 처리
unset($_SESSION['변수명']);
//session_id() 새로 생성해서 갱신
session_regenerate_id();
echo session_id(); // 값이 갱신 되는것을 볼 수 있다.
?>
◆ 파일 첨부
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file1">
<input type="submit" value="파일 업로드">
</form>
== upload.php ==
<?
$upload_dir = "upload"; // 파일 저장 상대경로
$file1name = $_FILES['file1']['name'];
$tmp_file = $_FILES['file1']['tmp_name'];
move_uploaded_file($tmp_file, "$upload_dir/$file1name"); //저장 경로에 파일 업로드 실행 함수
?>
== 설명 ==
form 태그를 이용해서 전송된 파일은 $_FILES 를 통해 접근 가능합니다.
서버가 업로드받은 파일은 $_FILES['file1']['tmp_name']에 들어있습니다
이게 저장될 위치를 $upload_dir로 설정하고, move_uploaded_file()함수를 위의 예처럼 실행시키면, 지정 위치에 업로드한 파일이 저장됩니다.
● test_member 테이블 작성
CREATE TABLE test_member (
id varchar(50) NOT NULL,
pass varchar(50) NOT NULL,
regdate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
== 설명 ==
CURRENT_TIMESTAMP () 함수는 현재 날짜와 시간을 리턴합니다.
"YYYY-MM-DD HH:MM:SS" = "년-월-일 시:분:초"
mysql> SELECT CURRENT_TIMESTAMP();
mysql> select now();
ㄴ/a_aaa/db.con.php
<?
##### 데이터베이스 연결설정 인자 (서버명, 사용자명, 비밀번호, 작업대상 데이터베이스명)
$host= "localhost";
$user= "root";
$pass= "apmsetup";
$db= "test";
##### 데이터베이스(mysql)에 연결한다.
$conn = mysql_connect($host,$user,$pass);
if(!$conn) {
error("데이터베이스 연결실패");
exit;
}
##### 작업대상 데이터베이스를 선택한다.
$dbnum = mysql_select_db($db);
if(!$dbnum) {
error("데이터베이스 선택실패");
exit;
}
?>
ㄴ/a_aaa/test.php (쿼리 테스트)
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>mysql - php - query</title>
</head>
<body>
<?
include $DOCUMENT_ROOT.("/dancepkt/www/a_aaa/db.con.php");
// 등록
$id = "1111";
$pass = "1111";
$query = "insert into test_member (id,pass) values ('$id','$pass')";
//mysql_query($query);
// 수정
$id = "1111";
$pass = "2222";
$query = "update test_member set pass = '$pass' where id = '$id'";
//mysql_query($query);
// 삭제
$id = "2222";
$query = "delete from test_member where id = '$id'";
//mysql_query($query);
/*
mysql_result() 함수 역시 결과 레코드 세트에서 필드값을 가져오는 역할을 한다. mysql_fetch_row(), mysql_fetch_object(), mysql_fetch_array() 함수가 결과 레코드 세트에서 배열이나 객체의 형태로 하나의 레코드가 가진 모든 필드값을 한꺼번에 가져오는데 반해 mysql_result() 함수는 한번 호출할 때 레코드가 가진 여러 필드 중에서 하나의 필드값만을 반환한다.
따라서 쿼리 결과 검색되어진 레코드 세트의 크기가 큰 경우에는 mysql_result() 함수보다는 mysql_fetch_row(), _array(), _object() 함수를 사용하는 것이 휠씬 빠른 결과를 보여준다.
MYSQL 5.5 이상 버전에서는 mysql_result() 함수를 사용할 수 없다.
*/
//총 게시물
$query = "select count(*) as cnt from test_member";
$result = mysql_query($query);
$rows = mysql_fetch_array($result);
$total_record = $rows[cnt];
echo "총 게시물 : ".$total_record;
// 리스트
$query = "select * from test_member";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){
echo $row[id]." / ";
echo $row[pass]." / ";
echo $row[regdate];
echo "<br>";
}
// 뷰1(_row)
$query = "select * from test_member where id='$id'";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
echo $row[0]." / ";
echo $row[1]." / ";
echo $row[2];
echo "<br>";
// 뷰2(_array)
$query = "select * from test_member where id='$id'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
echo $row[id]." / ";
echo $row[pass]." / ";
echo $row[regdate];
echo "<br>";
// 뷰3(_object)
$query = "select * from test_member where id='$id'";
$result = mysql_query($query);
$row = mysql_fetch_object($result);
echo $db_id = $row->id." / ";
echo $db_pass = $row->pass." / ";
echo $db_regdate = $row->regdate;
echo "<br>";
?>
</body>
</html>
◆ addslashes(), stripslashes(), htmlspecialchars(), nl2br() 함수
DB 작업을 하기 위해서 쿼리를 작성하게 되는데, 이때 DB 시스템은 작은따옴표 ' 와 큰따옴표 " 그리고 백슬래시 / 그리고, NULL byte 를 문자열을 구분하는 등의 기준으로 이용하게 됩니다.
그런데, 하나의 문자열 안에 따옴표가 들어가 있게되면, 예상치 못하게 오류가 발생하게 됩니다.
그래서, 문자열을 데이터베이스에 저장할 수 있는 포맷으로 변화시켜줄 필요가 있습니다.
예를 들면,
<?
//$title 변수를 게시판 제목에 해당하는 칼럼에 넣을 경우로 가정
$title = "i'm a boy";
$query = '$title';
mysql_query($query);
//이렇게 쿼리로 전송되게 되면, 'i'm a boy' (작은 따옴표가 3개) 오류가 발생하게 됩니다.
?>
그래서, 내부에 위치하게 될 따옴표들을 기준을 가지고 다르게 표현을 해 줘야합니다. 흔히들 이스케이프(escape) 시킨다...라고 표현하는데요.
I'm a boy 로 바꾸어 주는 작업을 말합니다. 그 작업을 해주는 함수가 아래의 addslashes() 함수입니다.
<?
$title = "i'm a boy";
$title = addslashes($title); //escape 처리
$query = "insert into bbs (title) values ('$title')";
mysql_query($query);
?>
그럼, DB에서 다시 꺼내왔을 때는 추가됐던 백슬래쉬를 제거를 해줘야 원래의 문자열이 되겠지요?
추가됐던 백슬래쉬를 제거해주는 함수가 stripslashes() 입니다.
<?
$query = "select title from bbs;
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$title = stripslashes($row[title]);
//태그 사용 불가 처리
$title = htmlspecialchars($title);
//개행처리 : \n을 <br> 대체
$comment = "첫번째 줄 내용\n 두번째 줄 내용";
$comment = nl2br($comment);
echo $comment;
?>
== 출력내용 =
첫번째 줄 내용
두번째 줄 내용
◆ rand() , range() , shuffle() , count() 함수
1. rand(최소 숫자,최대 숫자)
* 정수로 된 랜덤 숫자를 가져온다는 의미
* 최소 숫자, 최대 숫자를 인수로 입력하지 않으면 , 0부터 getrandmax() 사이의 임의의 난수를 반환한다.
<?
echo "인수 : " . rand(0,10); //0에서 10사이의 숫자 1개를 반환한다.
?>
2. range(최소 숫자,최대 숫자)
* 배열명 = range(범위시작값, 범위종료값);
<?
$num = range(1,5); //1 ~ 5
/* 위의 예제 배열 출력구문
$num[0] = 1;
$num[1] = 2;
$num[2] = 3;
$num[3] = 4;
$num[4] = 5;
*/
shuffle($num); //배열 변수를 랜덤하게 뒤섞는다
//$num 배열 변수를 출력해 보자
count($num); //$num 변수의 길이 값
for($j=1; $j<=count($num); $j++) {
echo $num[$j]."<br>";
}
?>
◆ strlen() , mb_strlen() - 문자열 길이 , substr() , mb_substr() - 문자열 자르기
1. strlen( 문자열 )
2. mb_strlen( 문자열 , 인코딩 = mb_internal_encoding() )
strlen은 문자열 하나만을 인수로 사용하지만,
mb_strlen은 문자열과 현재 파일의 인코딩(= 문자셋 혹은 charset )을 인수로 사용합니다.
mb_strlen 함수를 이용하면 한글 문자열 길이도 문제없이 가져올 수 있습니다.
<?
$str_eng = "abcdef";
$str_kor = "가나다";
echo "영어 : ".strlen( $str_eng ).'<br/>'; //6
echo "한글 : ".strlen( $str_kor ).'<br/>'; //9
// 파일 인코딩이 UTF-8인 경우에 대한 예제입니다.
echo "영어 : ".mb_strlen( $str_eng , "UTF-8" ).'<br/>'; //6
echo "한글 : ".mb_strlen( $str_kor , "UTF-8" ).'<br/>'; //3
?>
3. substr( $string, $start, [ $length ] )
4. mb_substr( $string, $start, [ $length ], [$encoding] )
<?
$str = "abcdefg 123 hijk 4567 lmn";
$str2 = "abcdefg 가나다 hijk 라마바사 lmn";
//영문,숫자 자를 때
echo substr( $str , 0, 10 ); //abcdefg 12
echo substr( $str , 4 ); //efg 123 hijk 4567 lmn
//한글 포함 자를 때
echo mb_substr( $str2 , 0, 10 , "utf-8"); //abcdefg 가나
?>
◆ strcmp() - 문자열 비교
두개의 문자열을 비교했을 때 문자열이 일치하면 0 (false) , 일치하지 않으면 0 아닌 정수 값 (true) 반환
대소문자를 구분
문자열 위치에는 문자열 대신 변수가 올 수도 있다.
● strcmp( 1번문자열 , 2번문자열 )
<?
$str1 = "hello";
$str2 = "hello";
// 1번째 방법
if(strcmp( $str1 , $str2 ) == 0){
echo "두 변수의 값이 같다.";
}else{
echo "두 변수의 값이 같지 않다.";
}
// 2번째 방법
if( !strcmp( $str1 , $str2 ) ){ //두 변수의 값이 같다면 false , ! 선언하면 true
echo "두 변수의 값이 같다.";
}else{
echo "두 변수의 값이 같지 않다.";
}
// 3번째 방법
if($str1 == $str2){
echo "두 변수의 값이 같다.";
}else{
echo "두 변수의 값이 같지 않다.";
}
//결과 : 두 변수의 값이 같다.
?>
◆ explode() - 문자열 분할
● explode() : 문자열을 분할하여 배열로 저장하는 함수
1. explode( delimiter, string );
2. explode( delimiter, string, [ limit ] );
delimiter : 문자열을 분할할 기준을 정합니다.
string : 분할할 문자열입니다.
limit : 옵션으로, 분할할 개수를 정합니다. 정수를 입력합니다.
<?
$str = 'one two three four';
$str1 = explode( ' ', $str );
count($str1); //4
for($i=0; $i<count($str1); $i++){
echo $str1[$i];
}
/* 결과 값
$str1[0]은 one
$str1[1]은 two
$str1[2]는 three
$str1[3]는 four
*/
$str2 = explode( ' ', $str, 3 );
/* 결과 값
$str2[0]은 one
$str2[1]은 two
$str2[2]는 three four
*/
?>
◆ ceil() , floor() , round() - 소수점 처리
● 소수점 처리
ceil() : 올림
floor() : 버림
round() : 반올림
<?
$num = 36.5;
ceil($num); //37
floor($num); //36
round($num) //37
$num2 = 36.2;
ceil($num2); //37
floor($num2); //36
round($num2) //36
$num3 = 36.277;
round($num3, 1) //소수점 한자리 표현 : 36.3
?>
'강의' 카테고리의 다른 글
PHP3 (0) | 2023.06.12 |
---|---|
PHP2 (0) | 2023.06.12 |
Spring Lec08 (0) | 2023.05.04 |
Spring Lec07 (0) | 2023.05.03 |
Spring Lec06 (0) | 2023.05.03 |
댓글