Iam試圖在PHP中創建基於OOP的論壇,並且目前正在致力於製作Database類。特別是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();
}
}
}
插入功能就像你看到的未完成。我不知道如何讓插入函數適應任何數量的參數,任何數量的數據庫列和任何表。現在函數中的代碼取自我使用過程編程的其他項目之一。它第一次使用數據庫的OOP。
我是OOP和PDO的新手。必須有某種方法或功能可以幫助我彌補失蹤。我現在看到的唯一解決方案是使用一個ridicoulus數量的字符串處理,如果語句...它不能是最好的解決方案...必須有一個更簡單的方法...
[此代碼本質上容易受到SQL注入的攻擊。](https://phpdelusions.net/pdo/lame_update) –
@YourCommonSense如果數據中的$ keys是來自用戶,那麼它很脆弱,就像我們執行'$ db-> insert('mytable',$ _POST)'並將整個$ _POST'數組作爲數據傳遞,對吧?但是,如果我們執行'$ db-> insert('mytable',array('first'=> $ _ POST ['first']))'',那麼它應該可以。這裏唯一能做的就是引用?我們可以爲表名和鍵添加$ this-> dbconn-> quote()來使其安全嗎? –
不,我們不能使用字符串引用標識符,它會導致語法錯誤。至少您必須格式化標識符,但最好將其列入白名單。 –