1
0

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.

PHPでDBにSQLを発行する

1
Last updated at Posted at 2019-04-21

やりたいこと

PHPでDBからデータを取得したり、逆に操作したりするようなSQLを投げたい。

環境

PHP 5.5.9
MySQL 14.14

やり方

色々手法はあるみたいですが、SQLインジェクション対策を意識したやり方で実現することに。

接続情報の設定
まずは接続するDBの情報を持たせる。

$dsn = 'mysql:host=localhost;dbname=bbs;charset=utf8';
$user = 'user01';
$password = 'password';

1行目は接続先のホスト名、DB名の指定。
2、3行目はDBに接続するユーザー名、パスワード。

接続

$db = new PDO($dsn,$user,$password);
$db->setAttribute(PDO::ATTR_EMULATE_PREPAES,false);

PDOはPHPとDBとの間に入る抽象化レイヤー。
先程宣言したDB情報とユーザー名、パスワードを指定してインスタンス化。
2行目は静的プレースホルダを使用するために必要な設定。

プリペアドステートメントの設定

$stmt = $db->prepare("SELECT * FROM T_TEST WHERE id = :id");
$stmt->bindparam(':id', $id ,PDO::PARAM_INT);
$stmt->execute();

prepareで発行したいSQLを指定する。
この際、何かしら変数をSQL文に埋め込む場合(今回の例だとID)、直接変数で指定するのではなく、bindparamを噛ませてデータを渡してあげる。
渡す値にクォーテーションなどが紛れて、意図しないSQLの動作を防げる。

最後にexecuteで実行。

DBから取得したデータは$stmtに連想配列で格納されるので、そこからfetchするなりなんなりで扱っていく。
ちなみに連想配列に設定されるIDはDBのカラム名と同じになる。

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?