0
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 3 years have passed since last update.

MySqlプロシージャ/ファンクションを使ってみた

Posted at

はじめに

お勉強がてらにプロシージャ/ファンクションの作り方、使い方を纏めてみた。

プロシージャとファンクションを用いるケースとは

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

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