初めに
こんにちは、今日も、自作関数の紹介です。
関数
<?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);
}
?>