はじめに
お勉強がてらにプロシージャ/ファンクションの作り方、使い方を纏めてみた。
プロシージャとファンクションを用いるケースとは
WebアプリケーションでできることとDatabaseに制御させることを分離させることができる。
メリット
- sql文をプログラム側で調整しなくてもよくなるため、セキュリティレベルが向上する。
プロシージャとファンクションの違い
戻り値の有無 | |
---|---|
プロシージャ | なし |
ファンクション | あり |
DBを照会するプロシージャを作ってみる
テーブル名をPHPから受け取ってSELECT文を実行するプロシージャを作る
DELIMITER //
CREATE PROCEDURE プロシージャ名(IN TableNameA CHAR(15),TableNameB CHAR(15))
BEGIN
set "@sql_query = CONCAT('SELECT * FROM ',TableName);
PREPARE stmt FROM @sql_query;
EXECUTE stmt;
END;
//
※注意
プロシージャの登録ができたらデリミタを;に戻してください
DELIMITER ;
使い方
phpからprocedureをcallする
$pdo = new PDO ( 'mysql:host={$server};dbname={$database};charset=utf8','{$user}', '{$password}');
$sql = $pdo->prepare( 'call プロシージャ名(?)');
$t1 = 'テーブル名';
$sql->bindParam(1, $t1, PDO::PARAM_STR);
$sql->execute();
※PDOとの接続判定などに用いるtry~catch文を除いた書き方になっています。
参考
https://proengineer.internous.co.jp/content/columnfeature/7078
https://blog.janjan.net/2018/11/01/php-call-mysql-storedprocedure/
https://www.php.net/manual/ja/pdo.constants.php
https://qiita.com/chihiro/items/5d438549b5869900abdd
https://teratail.com/questions/157257
https://dev.mysql.com/doc/refman/5.6/ja/sql-syntax-prepared-statements.html