개발 꿀팁/PHP

php 작업MySQL(pdo)

Jammie 2022. 9. 22. 14:50
반응형

pdo 확장은 php에 다양한 데이터베이스를 지원할 수 있는 경량 일관된 인터페이스를 제공하며, 다음은 pdo 확장을 사용하여 mysql을 조작하여 데이터의 첨삭 및 수정을 실현합니다

<?php
 
$dsn      = 'mysql:dbname=test;host=127.0.0.1';
$user     = 'root';
$password = '123456';
 
//링크 데이터베이스
try {
    $params = [
        PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8", //인코딩 설정
        PDO::ATTR_EMULATE_PREPARES   => false, //전처리 사용
    ];
    $db = new PDO($dsn, $user, $password, $params);
 
} catch (PDOException $e) {
    echo $e->getMessage();
    exit;
}
 
//여러 개의 데이터를 조회하다
$sth = $db->prepare('SELECT id, title FROM article WHERE id =?');
$sth->execute([1]);
$res1 = $sth->fetchAll(PDO::FETCH_ASSOC); //반환되는 값을 설정할 수 있는 여러 가지 방법이 있습니다
print_r($res1);
 
//한 줄의 데이터를 조회하다
$sth = $db->prepare('SELECT id, title FROM article WHERE id =?');
$sth->execute([1]);
$res2 = $sth->fetch(PDO::FETCH_ASSOC);
print_r($res2);
$sth = null; //결과 집합 풀기
 
//일렬을 취하다
$sth = $db->prepare('SELECT title FROM article WHERE 1');
$sth->execute();
$res3 = $sth->fetchAll(PDO::FETCH_COLUMN);
print_r($res3);
$sth = null; //결과 집합 풀기
 
//추가
$sth = $db->prepare("INSERT INTO `article`(`title`,`content`,`created_at`)VALUES(?,?,?)");
$sth->execute(['제목', '내용', time()]);
echo "영향을 받는 행 수:", $sth->rowCount(), "<br/>";
echo "자동증가ID:", $db->lastInsertId(), "<br/>";
 
//고치다
$sth = $db->prepare("UPDATE `article` SET `title`=? WHERE `id`=?");
$sth->execute(['제목 12', 2]);
echo "영향을 받는 행 수:", $sth->rowCount(), "<br/>";
 
//삭제하다
$sth = $db->prepare("DELETE FROM `article` WHERE `id`=?");
$sth->execute([3]);
echo "영향을 받는 행 수:", $sth->rowCount(), "<br/>";
 
//사무
try {
    $db->beginTransaction();
 
    $sth = $db->prepare("UPDATE `article` SET `title`=? WHERE `id`=?");
    $sth->execute(['사무1', 1]);
    echo "영향을 받는 행 수:", $sth->rowCount(), "<br/>";
 
    $sth = $db->prepare("UPDATE `article` SET `title`=? WHERE `id`=?");
    $sth->execute(['사무1', 2]);
    echo "영향을 받는 행 수:", $sth->rowCount(), "<br/>";
 
    //때때로, 당신은 수동으로 이상을 던져 롤백 작업을 해야 할 수도 있습니다
    // throw new Exception("오류 메시지", 1);
 
    $db->commit();
    echo "성공하다";
} catch (Exception $e) {
    $db->rollBack();
    echo $e->getMessage();
}
 
$db = null; //데이터베이스 연결 닫기

표 작성 문구:

CREATE TABLE `article` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `content` text COLLATE utf8mb4_unicode_ci,
  `created_at` int(11) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='문장표';
 
INSERT INTO `test`.`article` (`id`, `title`, `content`, `created_at`) VALUES ('1', '제목 12', '테스트 내용', '234');
INSERT INTO `test`.`article` (`id`, `title`, `content`, `created_at`) VALUES ('2', '제목 12', '테스트 내용2', '2323');
반응형