рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдбреАрдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП


рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХреНрдпреЛрдВ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП PHP рдХреЗ рдкреАрдбреАрдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХрдИ PHP рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mysql рдФрд░ mysqli рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди PHP рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг 5.1 рдХреЗ рдмрд╛рдж рд╕реЗ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ - PHP рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ ред рдпрд╣ рд╡рд░реНрдЧ, рдЬрд┐рд╕реЗ рдкреАрдбреАрдУ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╕реНрддреБрдУрдВ рдФрд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХрдердиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреА рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рдХрд░реЗрдЧрд╛!

рдкреАрдбреАрдУ рдХрд╛ рдкрд░рд┐рдЪрдп


"рдкреАрдбреАрдУ - PHP рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдкрд░рдд рд╣реИ рдЬреЛ рдХрдИ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред"

рд╡рд╣ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╡рд┐рднрд┐рдиреНрди DBMS рдХреА рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╣реБрдд рдХрдо рджрд░реНрджрдирд╛рдХ рдмрдирд╛рддрд╛ рд╣реИред рдЕрдХреНрд╕рд░, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ mysql рдФрд░ mysqli рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рд▓рдЪреАрд▓реЗ PDO рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХреЗред

DBMS рдХрд╛ рд╕рдорд░реНрдерди


рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдбреАрдУ рдЪрд╛рд▓рдХ рдореМрдЬреВрдж рд╣реИред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреНрд░рд╛рдЗрд╡рд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдирд╣реАрдВ рд╣реИрдВред рдЖрдк рдЗрд╕ рддрд░рд╣ рдЙрдкрд▓рдмреНрдз рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
print_r(PDO::getAvailableDrivers());



. . , , SQLite.
try {  
  # MS SQL Server  Sybase  PDO_DBLIB  
  $DBH = new PDO("mssql:host=$host;dbname=$dbname", $user, $pass);  
  $DBH = new PDO("sybase:host=$host;dbname=$dbname", $user, $pass);  
  
  # MySQL  PDO_MYSQL  
  $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);  
  
  # SQLite  
  $DBH = new PDO("sqlite:my/database/path/database.db");  
}  
catch(PDOException $e) {  
    echo $e->getMessage();  
}

, try/catch тАУ PDO- ( ).

$DBH ┬лdatabase handle┬╗ .

null.
#    
$DBH = null;

php.net.

PDO


PDO , try/catch. , PDO :
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );  
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );  
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

, .

PDO::ERRMODE_SILENT


. , , mysql mysqli. DRY .

PDO::ERRMODE_WARNING


Warning . .

PDO::ERRMODE_EXCEPTION


. , . , , :
#      
try {  
  $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);  
  $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
  
  # !  DELECT  SELECT!  
  $DBH->prepare('DELECT name FROM people')->execute();  
}  
catch(PDOException $e) {  
    echo ",   .";  
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);  
}

SQL- , . - , - .

Insert Update


. PDO . ( UPDATE, INSERT)

:
# STH  "Statement Handle"  
$STH = $DBH->prepare("INSERT INTO folks ( first_name ) values ( 'Cathy' )");  
$STH->execute();

- exec(), prepared statements. SQL-, .

Prepared Statements


prepared statements SQL-.

Prepared statement тАФ SQL-, . SQL- , placeholderтАЩ.

prepared statements.
#  placeholders -  SQL- !  
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values ($name, $addr, $city)");  
  
#  placeholders  
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (?, ?, ?)"); 
 
#  placeholders 
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (:name, :addr, :city)");

, . placeholderтАЩ , prepared statements.

placeholderтАЩ


#    placeholder,    1  3  
$STH->bindParam(1, $name);  
$STH->bindParam(2, $addr);  
$STH->bindParam(3, $city);  
  
#     
$name = "Daniel"  
$addr = "1 Wicked Way";  
$city = "Arlington Heights";  
$STH->execute();  
  
#    ,      
$name = "Steve"  
$addr = "5 Circle Drive";  
$city = "Schaumburg";  
$STH->execute();

. placeholderтАЩ ( 2-4). . , .

SQL- , . :
#  ,    
$data = array('Cathy', '9 Dark and Twisty Road', 'Cardiff');  
  
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (?, ?, ?)");  
$STH->execute($data);

$data[0] placeholderтАЩ, $data[1] тАФ , .. : , .

placeholderтАЩ


#     placeholderтАЩ
#     
#     
$STH->bindParam(':name', $name);

, . , , placeholderтАЩ.
# ,     
$data = array( 'name' => 'Cathy', 'addr' => '9 Dark and Twisty', 'city' => 'Cardiff' );  
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (:name, :addr, :city)");  
$STH->execute($data);

placeholderтАЩ , . , , :
#      
class person {  
    public $name;  
    public $addr;  
    public $city;  
  
    function __construct($n,$a,$c) {  
        $this->name = $n;  
        $this->addr = $a;  
        $this->city = $c;  
    }  
    #  ...  
}  
  
$cathy = new person('Cathy','9 Dark and Twisty','Cardiff');  
  
#      
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (:name, :addr, :city)");  
$STH->execute((array)$cathy);

execute() , .



->fetch(). , . :: FETCH_ASSOC, FETCH_CLASS, FETCH_OBJ. , :
$STH->setFetchMode(PDO::FETCH_ASSOC);

->fetch().

FETCH_ASSOC


. , mysql/mysqli.
#      placeholderтАЩ,
#     query()  
$STH = $DBH->query('SELECT name, addr, city from folks');  
  
#   
$STH->setFetchMode(PDO::FETCH_ASSOC);  
  
while($row = $STH->fetch()) {  
    echo $row['name'] . "\n";  
    echo $row['addr'] . "\n";  
    echo $row['city'] . "\n";  
}

while() .

FETCH_OBJ


std .
#  
$STH = $DBH->query('SELECT name, addr, city from folks');  
  
#     
$STH->setFetchMode(PDO::FETCH_OBJ);  
  
#  
while($row = $STH->fetch()) {  
    echo $row->name . "\n";  
    echo $row->addr . "\n";  
    echo $row->city . "\n";  
}


FETCH_CLASS


fetch_class . . , , , ( public).

, .

, .
class secret_person {  
    public $name;  
    public $addr;  
    public $city;  
    public $other_data;  
  
    function __construct($other = '') {  
        $this->addr = preg_replace('/[a-z]/', 'x', $this->addr);  
        $this->other_data = $other;  
    }  
}

x. :
$STH = $DBH->query('SELECT name, addr, city from folks');  
$STH->setFetchMode(PDO::FETCH_CLASS, 'secret_person');  
  
while($obj = $STH->fetch()) {  
    echo $obj->addr;  
}

тАЩ5 RosebudтАЩ, тАЩ5 RxxxxxxтАЩ.

, , . PDO .
$STH->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'secret_person');

, (PDO::FETCH_PROPS_LATE), , .

, :
$STH->setFetchMode(PDO::FETCH_CLASS, 'secret_person', array('stuff'));

:
$i = 0;  
while($rowObj =  $STH->fetch(PDO::FETCH_CLASS, 'secret_person', array($i))) {  
    // - 
    $i++;
}



( ) PDO ( !), .
$DBH->lastInsertId();

->lastInsertId() id . , ( $DBH), ($STH).
$DBH->exec('DELETE FROM folks WHERE 1');  
$DBH->exec("SET time_zone = '-8:00'");

->exec() , , .
$safe = $DBH->quote($unsafe);

->quote() , . , prepared statements.
$rows_affected = $STH->rowCount();

->rowCount() , . , SELECT- PHP 5.1.6. PHP , :
$sql = "SELECT COUNT(*) FROM folks";  
if ($STH = $DBH->query($sql)) {  
    #     
    if ($STH->fetchColumn() > 0) {  
    	  #    ,    !  
    }  
    else {  
        #    ,      
    }  
}



, - mysql mysqli.


Source: https://habr.com/ru/post/In137664/


All Articles