PHPカンファレンス福岡2016のトークで使ったスライドです 関連レポジトリ)https://github.com/omoon/phpconfuk2016
8IZEPO`UZPVUSZ2VFSZ#VJMEFS1)1$POGFSFODF'VLVPLB.BZ 4PUBSP0.63"
View Slide
"CPVU.Fw4PUBSP0.63"w0TBLB +BQBOw,BOTBJ1)16TFST(SPVQ4UB⒎w1)1 w-BSBWBMwPNPPOPSHw!PNPPO
2VFSZ#VJMEFS
2VFTUJPOTw%PZPVLOPX42- w.Z42-1PTUHSF42-0SBDMFPUIFST w1%0w,OPX2VFSZ#VJMEFSw6TF2VFSZ#VJMEFSw6TF03.
/PUFw1%0w*MMVNJOBUF%BUBCBTFw.Z42-
4BNQMF%BUBCBTF
5PQJDTw8IBUJTl2VFSZ#VJMEFSz w#FOFpUTw)PXUPBQQMZ2VFSZ#VJMEFSUPZPVSPXOBQQw4PNFFYBNQMFT
8IBU`T2VFSZ#VJMEFS
1JD DPOTUSVDUJPO
"UPPMUPCVJME42-
SELECT name, price FROM books WHERE name LIKE '%PHP%' ORDER BY price DESC LIMIT 10
&BDIQBSUPG42-IBTB30-&
$builder->table('books') ->where('name', 'like', '%PHP%') ->orderBy('name', 'desc') ->take(10)->select('name', 'price');
SELECT `name`, `price` FROM `books` WHERE `name` LIKE '%PHP%' ORDER BY `price` DESC LIMIT 10
DELETEFROM `books` WHERE `name` LIKE '%PHP%' ORDER BY `price` DESC LIMIT 10
$builder->table('books') ->where('name', 'like', '%PHP%') ->orderBy('price', 'desc') ->take(10)->select('name', 'price');
$builder->table('books') ->where('name', 'like', '%PHP%') ->orderBy('price', 'desc') ->take(10)->delete();
$builder->table('books') ->where('name', 'like', '%PHP%') ->orderBy('price', 'desc') ->take(10)->select('name', ‘price')->get();
#FOFpUT
#FOFpUTw&BTZUPFEJUw4FDVSFw&BTZUPSFBEw3FVTBCMF
&BTZUPFEJU
%FNP
4FDVSF
$name = 'PHPΤϯδχΞཆಡຊ'; $sql = " SELECT `name`, `price` FROM `books` WHERE `name` = $name ORDER BY `price` DESC"; $sth = $pdo->prepare($sql); $sth->execute();
$name = "t' OR 't' = 't"; $sql = <<<'SQL' SELECT `name`, `price` FROM `books` WHERE `name` = $name ORDER BY `price` DESC SQL; $sth = $pdo->prepare($sql); $sth->execute();
$name = "t' OR 't' = 't"; $sql = <<SELECT `name`, `price` FROM `books` WHERE `name` = ? ORDER BY `price` DESC SQL; $sth = $pdo->prepare($sql); $sth->execute([$name]);
$name = "t' OR 't' = 't"; $builder->table('books') ->select('name', 'price') ->where('name', '=', $name) ->orderBy('name', 'desc');
&BTZUPSFBE
SELECT `name`, `price` FROM `books` WHERE `name` LIKE ‘%PHP%'AND `price` > 2000 ORDER BY `price` DESC LIMIT 10
$sql = " SELECT `name`, `price` FROM `books` WHERE `name` LIKE :name AND `price` > :price ORDER BY `price` DESC LIMIT :limit "; $sth = $pdo->prepare($sql); $sth->bindParam(':name', $name); $sth->bindParam(':price', $price); $sth->bindParam(':limit', $limit, PDO::PARAM_INT); $sth->execute();
$name = '%PHP%'; $price = 2000; $limit = 10; $sql = "SELECT `name`, `price` FROM `books` WHERE `name` LIKE ? AND `price` > ? ORDER BY `price` DESC LIMIT ?"; $sth = $pdo->prepare($sql); $sth->execute([$name, $price, $limit]);
$name = '%PHP%'; $price = 2000;$limit = 10; $builder->table('books') ->select('name', 'price') ->where('name', 'like', $name) ->where('price', '>', $price) ->orderBy('name', 'desc') ->take($limit);
3FVTBCMF
SELECT `name`, `price` FROM `books` WHERE `price` < 2000
$cheap_books = $builder->table('books') ->where('price', '<', 2000);
$cheap_books->orderBy('name'); $cheap_books->orderBy('price'); $cheap_books->orderBy('price', 'desc'); $cheap_books->orderBy('price', ‘desc')->take(10);
$cheap_books->orderBy('price', ‘desc')->take(10)->select();
$cheap_books->orderBy('price', ‘desc')->take(10)->delete();
$cheap_books->count(); $cheap_books->max('price'); $cheap_books->min('price'); $cheap_books->average('price'); $cheap_books->sum('price');
)PXUPBQQMZ2VFSZ#VJMEFSUPZPVSPXOBQQT
{ "require": { "illuminate/database": "5.2.*" } }
require_once '/path/to/vendor/autoload.php';
use Illuminate\Database\Capsule\Manager as Builder;class Connection { private $host = 'localhost'; private $username = 'user'; private $password = 'pass'; private $database = 'database'; public function getBuilder() { $builder = new Builder(); $builder->addConnection([ 'driver' => 'mysql', 'host' => $this->host, 'database' => $this->database, 'username' => $this->username, 'password' => $this->password, 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ]); $builder->setAsGlobal(); $builder->setFetchMode(PDO::FETCH_ASSOC); return $builder->connection(); } }$builder = (new Connection())->getBuilder();
4PNFNPSFFYBNQMFT
+0*/
SELECT `books`.`name` AS `book_name`, `books`.`price`, `authors`.`name` AS `author_name`, `authors`.`age` FROM `books` LEFT JOIN `authors` ON `books`.`author_id` = `authors`.`id` WHERE `books`.`price` >= ?
$results = $builder->table('books') ->leftJoin('authors', 'books.author_id', '=', 'authors.id') ->where('books.price', '>=', 5000) ->select( 'books.name as book_name', 'books.price', 'authors.name as author_name', 'authors.age' );
*/4&35
$values = []; for ($i = 0; $i < 10000; $i++) { $values[] = [ 'name' => 'name' . $i, 'author_id' => rand(1, 10), 'price' => rand(500, 10000), ]; } $sql = "INSERT INTO books (name, author_id, price)values (?, ?, ?)”; $sth = $pdo->prepare($sql); foreach ($values as $value) { $sth->execute(array_values($value)); } $builder->table('books')->insert($values);
INSERT INTO `books`(`name`, `author`, `price`) VALUES(?, ?, ?) . . . VS INSERT INTO `books`(`name`, `author`, `price`)VALUES(?, ?, ?),(?, ?, ?),(?, ?, ?)......
NZTRMJ T1%0 T2VFSZ#VJMEFS NT
61%"5&3"8
UPDATE `books` SET `name` = CONCAT('ʲ͍҆Αʂʳ', `name`) WHERE `price` < 3000
$cheap_books->update([ 'name' =>"CONCAT('ʲ͍҆Αʂʳ' , `name`)" ]);
$cheap_books->update([ 'name' => $builder->raw("CONCAT('ʲ͍҆Αʂʳ' , `name`)") ]);
"OZ2VFTUJPOT