LoginSignup
1
1

More than 1 year has passed since last update.

phpでデータベースの読み書きを簡単にする関数をつくる

Last updated at Posted at 2022-12-04

初めに

こんにちは、今日も、自作関数の紹介です。

関数

<?php
//データベースに値を登録する関数
//pdo_insert(データベースホスト,データベース名,データベースユーザー名,データベースパスワード,テーブル名,入れる値が入っている連想配列)
//連想配列は、array("カラム名"=>"絡む内容","カラム名2"=>"カラム内容")の形です。
function pdo_insert($db_host,$db_name,$db_username,$db_pass,$table_name,$value_array){
    $pdo = new PDO('mysql:host='.$db_host.';dbname='.$db_name.';',$db_username,$db_pass);
	$value_array_key = array_keys($value_array);
	$value_array_value = array_values($value_array);
	$value_array_key_count = count($value_array_key);
	$value_array_key = implode("`,`", $value_array_key);
	$tpdo = $pdo->prepare('INSERT INTO '.$table_name.' (`'.$value_array_key.'`) VALUES ('.substr(str_repeat('?,',$value_array_key_count), 0, -1).')');
	$tpdo->execute($value_array_value);
	return $tpdo->fetch(PDO::FETCH_ASSOC);
}
?>

ごちゃごちゃしているけれど、こちらです。

説明・用途

この関数を使えば、bindナントカしなくても気軽にMySQLへデータを登録することができます。
説明はいらないと思いますが...
連想配列の形で入れたい値を読み込み、それをもとにSQL文を生成して実行しています。
ただ、これだとエスケープがされないんじゃないかな?
調べてはいませんが、使うときはhtmlescape関数使ったほうが良いと思います。

使い方

これも書いてあるけど...
以下の形式です。

pdo_insert(データベースホスト,データベース名,データベースユーザー名,データベースパスワード,テーブル名,入れる値が入っている連想配列);

連想配列は、

array("カラム名"=>"カラム内容","カラム名2"=>"カラム内容");

の形で渡してあげて下さい。

追記

コメントでいくつかご指摘をいただきました。
自分のコードを見直すとても良い機会をくださり,本当にありがとうございます。

当方が作成した関数ですが、DBpass、DBusernameをそのまま送るよりもpdoオブジェクトを直接送る方法もあります。
その場合、以下のようなコードになります。

<?php

/**
 * データベースに値を登録する関数
 *
 * @param non-empty-string $table_name
 * @param array<non-empty-string, string> $values
 */
function pdo_insert(PDO $pdo, string $table_name, array $values): void
{
	$value_array_key = array_keys($value_array);
	$value_array_value = array_values($value_array);
	$value_array_key_count = count($value_array_key);
	$value_array_key = implode("`,`", $value_array_key);
	$tpdo = $pdo->prepare('INSERT INTO '.$table_name.' (`'.$value_array_key.'`) VALUES ('.substr(str_repeat('?,',$value_array_key_count), 0, -1).')');
	$tpdo->execute($value_array_value);
	return $tpdo->fetch(PDO::FETCH_ASSOC);
}
?>
1
1
3

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
1