PHPでOOPベースのフォーラムを作成しようとしていますが、現在はデータベースクラスの作成に専念しています。具体的には、IamはDatatableクラスの汎用クラスの挿入クラス関数(PDO btwを使用)を作成します。データベースインサートクラス関数を作成するときにスタックする
class DB
{
private $dbconn;
public function __construct(){
}
protected function connect($dbname, $dbhost='127.0.0.1', $dbuser='root', $dbpass=''){
try{
$this->dbconn = new PDO("mysql:host=$dbhost;dbname=$dbname;", $dbuser, $dbpass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
}
catch(PDOException $e){
echo 'Connection failed: '.$e->getMessage()."<br />";
}
}
protected function disconnect(){
$this->dbconn = null;
}
public function insert($dbname,){
$this->connect($dbname);
try{
# prepare
$sql = "INSERT INTO pdodemotable (firstname, lastname, age, reg_date)
VALUES (?, ?, ?, now())";
$stmt = $dbconn->prepare($sql);
# the data we want to insert
$data = array($firstname, $lastname, $age);
# execute width array-parameter
$stmt->execute($data);
echo "New record created successfully";
}
catch(PDOException $e){
echo $sql . "<br>" . $e->getMessage();
}
}
}
挿入機能は未完成です。私は、どのように引数の任意の量、データベースの列とANYテーブルの任意の量に適応するために挿入関数を取得する把握することはできません。今のところ関数内のコードは、私が手続き型プログラミングを使用していた私の他のプロジェクトの1つから取られています。 OOPをデータベースで初めて使用する
私はOOPとPDOの初心者です。 Imが欠けているのを助けることができるある種の方法または機能がなければならない。私が今見ている唯一の解決策は、文字列処理とif文のridicoulusの量を使用することです。それは最高の解決策ではありません...より簡単な方法が必要です...
[このコードは基本的にSQLインジェクションに対して脆弱です。](https://phpdelusions.net/pdo/lame_update) –
@YourCommonSenseデータの '$ keys 'がユーザーから来ていると脆弱です'$ db-> insert( 'mytable'、$ _POST)'を実行し、 '$ _POST'配列全体をデータとして渡しますか?しかし、 '$ db-> insert( 'mytable'、array( 'first' => $ _ POST ['first']))'のようなことをすればOKです。またここで行うことができるのは引用だけですか?テーブル名とキーを安全にするために$ this-> dbconn-> quote()を追加することはできますか? –
いいえ、識別子に文字列引用符を使用することはできません。構文エラーが発生します。少なくとも、識別子の書式を設定する必要がありますが、識別子をホワイトリストに登録する方がよいでしょう。 –