1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PDO 超入門

Last updated at Posted at 2020-05-06

2020年5月6日

PDO方式で、dbと繋ぐサンプル:


1. Mampを立ち上げでcmdに以下の内容を入力:
cd /Applications/MAMP/Library/bin/
./mysql -u root -proot 

2.繋ぐ
<?php
$dsn = "mysql:host = localhost";
$user = "root";
$password = "root";
date_default_timezone_set('Asia/Tokyo');

try{
    $pdo = new PDO($dsn ,$user, $password);
    echo "Connected: " . date("Y-m-d H:i:s");
}
catch(PDOException $e){
    echo $e->getMessage();
}
?>

3.CREATE db
<?php
$dsn = "mysql:host = localhost";
$user = "root";
$password = "root";
date_default_timezone_set('Asia/Tokyo');

try{
    $conn = new PDO($dsn ,$user, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "CREATE DATABASE dbMay6";

    $conn->exec($sql);
    echo "New db created: " . date("Y-m-d H:i:s");
}
catch(PDOException $e){
    echo $sql . ': ' . $e->getMessage();
}
?>

4.CREATE table
<?php
$dsn = "mysql:host=localhost;dbname=dbMay6";
$user = "root";
$password = "root";
date_default_timezone_set('Asia/Tokyo');

try{
    $conn = new PDO($dsn ,$user, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql =<<<EOL
    CREATE TABLE Users (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    firstname VARCHAR(30) NOT NULL,
    lastname VARCHAR(30) NOT NULL,
    email VARCHAR(50),
    reg_date TIMESTAMP)
    EOL;

    $conn->exec($sql);
    echo "New table created: " . date("Y-m-d H:i:s");
}
catch(PDOException $e){
    echo $sql . ': ' . $e->getMessage();
}
?>

5.INSERT new data
<?php
$dsn = "mysql:host=localhost;dbname=dbMay6";
$user = "root";
$password = "root";
date_default_timezone_set('Asia/Tokyo');

try{
    $conn = new PDO($dsn ,$user, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql =<<<EOL
    INSERT INTO Users (firstname, lastname, email)
    VALUES ('John', 'Doe', 'john@example.com')
    EOL;

    $conn->exec($sql);
    echo "New data inserted: " . date("Y-m-d H:i:s");
}
catch(PDOException $e){
    echo $sql . ': ' . $e->getMessage();
}
?>

6.INSERT new data(複数回)
<?php
$dsn = "mysql:host=localhost;dbname=dbMay6";
$user = "root";
$password = "root";
date_default_timezone_set('Asia/Tokyo');

try{
    $conn = new PDO($dsn ,$user, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $conn->beginTransaction();

    $conn->exec("INSERT INTO Users (firstname, lastname, email) 
    VALUES ('John', 'Doe', 'john@example.com')");
    $conn->exec("INSERT INTO Users (firstname, lastname, email) 
    VALUES ('Mary', 'Moe', 'mary@example.com')");
    $conn->exec("INSERT INTO Users (firstname, lastname, email) 
    VALUES ('Julie', 'Dooley', 'julie@example.com')");

    $conn->commit();
    echo "Mutiplied data inserted: " . date("Y-m-d H:i:s");
}
catch(PDOException $e){
    $conn->rollback();
    echo $sql . ': ' . $e->getMessage();
}
?>



7.INSERT new data(Prepared、複数回)
<?php
$dsn = "mysql:host=localhost;dbname=dbMay6";
$user = "root";
$password = "root";
date_default_timezone_set('Asia/Tokyo');

try{
    $conn = new PDO($dsn ,$user, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $conn->prepare("INSERT INTO Users (firstname, lastname, email) 
    VALUES (:firstname, :lastname, :email)");
    $stmt->bindParam(':firstname', $firstname);
    $stmt->bindParam(':lastname', $lastname);
    $stmt->bindParam(':email', $email);
 
    $firstname = "John";
    $lastname = "Doe";
    $email = "john@example.com";
    $stmt->execute();
 
    $firstname = "Mary";
    $lastname = "Moe";
    $email = "mary@example.com";
    $stmt->execute();
 
    $firstname = "Julie";
    $lastname = "Dooley";
    $email = "julie@example.com";
    $stmt->execute();
 
    echo "Prepared data inserted: " . date("Y-m-d H:i:s");
}
catch(PDOException $e){
    echo $sql . ': ' . $e->getMessage();
}
?>

8.SELECT * FROM _TABLE

fetchAll(PDO::FETCH_ASSOC): ↓

<?php

$dsn = "mysql:host=localhost;dbname=dbMay6";
$user = "root";
$password = "root";

try{
    $pdo = new PDO($dsn, $user, $password);
    $sql = "SELECT * FROM users";
    $stm = $pdo->query($sql);
    $data = $stm->fetchAll(PDO::FETCH_ASSOC);
    foreach($data as $row){
        echo $row['id'] . $row['email'] . "<br>";
    }
}
catch(PDOException $e){
    echo $e->getMessage();
}

?>

fetchAll(PDO::FETCH_NUM): ↓

<?php

$dsn = "mysql:host=localhost;dbname=dbMay6";
$user = "root";
$password = "root";

try{
    $pdo = new PDO($dsn, $user, $password);
    $sql = "SELECT * FROM users";
    $stm = $pdo->query($sql);
    $data = $stm->fetchAll(PDO::FETCH_NUM);
    foreach($data as $row){
        echo $row[0] . $row[count($row)-1] . "<br>";
    }
}
catch(PDOException $e){
    echo $e->getMessage();
}

?>

8.5 ダミーサンプル
<?php

$val = "";
$selVal = $_POST['select'];
if($_SERVER["REQUEST_METHOD"]=="POST"){
    if(!empty($selVal)&&($selVal!="")){
        $val = text_input($selVal);
    }        
}
function text_input($text){
    $text = trim($text);
    $text = stripslashes($text);
    $text = htmlspecialchars($text);
    return $text;
}

?>

<form action = "<?php echo htmlspecialchars($_SERVER["PHP_SELF"])?>" method = "POST">
    <select name = "select">
        <option value = "">please check</option>
        <option value = "1">1</option>
        <option value = "2">2</option>
        <option value = "3">3</option>
        <option value = "4">4</option>
        <option value = "5">5</option>
        <option value = "6">6</option>
        <option value = "7">7</option>
    </select>
    <input type = "submit" value = "submit">
</form>

<?php
    //echo $val;
    $dsn = "mysql:host=localhost;dbname=dbMay6";
    $user = "root";
    $password = "root";

    $pdo = new PDO($dsn, $user, $password);
    $sql = "SELECT * FROM users WHERE id = ?";
    $stm = $pdo->prepare($sql);
    $stm->bindValue(1 , $val);
    $stm->execute();

    $data = $stm->fetch(PDO::FETCH_ASSOC);
    echo $data['email'];
?>

9.DELETE
<?php
$dsn = "mysql:host=localhost;dbname=dbMay6";
$user = "root";
$password = "root";

try{
    $dbh = new PDO($dsn, $user, $password);
    $sql = "DELETE FROM users WHERE id = ?";
    $stmt = $dbh->prepare($sql);
    $id = 2;
    $stmt->bindValue(1, $id);
    $stmt->execute();
    echo "done!";
}
catch(PDOException $e){
    throw $e;
}
?>

[ref1] https://geek-docs.com/php/php-tutorial/php-pdo.html#PHP_PDO-4
[ref2] https://www.runoob.com/php/php-mysql-update.html

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?