-
-
// pdo
- $pdo = new pdo("mysql:host=localhost;dbname=database", 'username', 'password');
- $mysqli = mysqli_connect('localhost','username','password','database');
// mysqli、オブジェクト指向
- $ mysqli = new mysqli('localhost','username','password','database');
-
コードをコピー
3. データベースのサポート
pdo は複数のデータベースをサポートしますが、mysqli は mysql のみをサポートします
4. 名前パラメータ 名前パラメータ
PDO モード:
-
- $params = array(':username' => 'test', ':email' => $mail, ':last_login' => time() - 3600); >prepare('
- select * from users
- where username = :username
- and email = :email
- and last_login > :last_login');
-
Copy code
MySQL はさらに面倒で、これをサポートしていません。のみ:
- $query = $mysqli->prepare('
- select * from users
- where username = ?
- and email = ?
- and last_login > ?');
- $query->bind_param(' sss', 'test', $mail, time() - 3600);
- $query->execute();
-
-
コードをコピー
この場合、質問を順番に並べるのはさらに面倒になります1つずつマークするのはあまり便利ではありません。
5. ORMマッピングのサポート
たとえば、次のようなクラス ユーザーがあります。
class User- {
- public $id;
- public $first_name;
- public $last_name;
- public function info()
- {
- return '#' . $this->id . $this->first_name . ' ' . $this->last_name;
- }
- }
- $query = "ユーザーから ID、first_name、last_name を選択";
- // PDO
- $result = $pdo->query ($query);
- $result->setFetchMode(PDO::FETCH_CLASS, 'User');
- while ($user = $result->fetch())
- {
- echo $user->info() . "n";
- }
-
-
コードをコピー
mysqli はプロセス指向のアプローチを使用します。
" n"; }}
コードをコピー
-
- 6. SQL インジェクションを防ぐ (SQL インジェクションを防ぐための PHP メソッドの分析):
PDO手動設定
-
-
-
-
$username = pdo::quote($_get['username']); $pdo->query("select * from users where username = $username");
コードをコピー
$username = mysqli_real_escape_string($_get['username']); $mysqli->query("select * from users where username = '$username'");
コードをコピー
$pdo->prepare('select * from users where username = :username'); $pdo->execute(array(':username' => $_get['username'] ));
コードをコピー
$query = $mysqli->prepare('select * from users where username = ?'); $query->bind_param('s', $_get['username']); $query->execute();
コードをコピー
|