2012-11-20 66 views
2

好吧,這會有點複雜。用PHP mysqli做靈活的「INSERT INTO」查詢的方法?

但現在我正在使用一個家庭函數來創建一個查詢插入一個頁面到數據庫。

我想知道是否有一個更靈活的方法來實現靈活的「插入」方法。

問題是,我有一些字段是可選的在創建頁面時輸入,所以現在我正在使用這個地方,我正在運行所有字段並檢查它們是否設置。 :

//creates an Array which can be used to make a MySQL query 
function createQueryArray($new) { 
    if (isset($this->users_id)) 
     $this->query_array['users_id'] = mysql_real_escape_string($this->users_id); 
    if (isset($this->pagename)) 
     $this->query_array['pagename'] = mysql_real_escape_string($this->pagename); 
    if (isset($this->seo_pagetitle)) 
     $this->query_array['seo_pagetitle'] = mysql_real_escape_string($this->seo_pagetitle); 
    if (isset($this->seo_description)) 
     $this->query_array['seo_description'] = mysql_real_escape_string($this->seo_description); 
    if (isset($this->seo_keywords)) 
     $this->query_array['seo_keywords'] = mysql_real_escape_string($this->seo_keywords); 
    if (isset($this->seo_robots)) 
     $this->query_array['seo_robots'] = mysql_real_escape_string($this->seo_robots); 
    if (isset($this->seo_canonical)) 
     $this->query_array['seo_canonical'] = mysql_real_escape_string($this->seo_canonical); 
    if (isset($this->type)) 
     $this->query_array['page_type'] = mysql_real_escape_string($this->type); 
    //$this->query_array['last_edited'] = date("Y-m-d H:i:s"); 
} 

後來我打電話與陣列和表我想在頁面中插入到這個功能:

function createInsertStm($arr, $table) { 
    $mysqlQuery = ("INSERT INTO $table ("); 
    $insert = ""; 
    $values = ""; 
    if (is_array($arr)) 
     foreach ($arr as $key => $value) { 
      if ($insert == "") 
       $insert .= $key; 
      else 
       $insert .= ', ' . $key; 
      if ($values == "") 
       $values .= (preg_match('/(MAX\(id\))(.*?)/', $value)) ? $value : '"' . $value . '"'; 
      else 
       $values .= (preg_match('/(MAX\(id\))(.*?)/', $value)) ? "," . $value : ',"' . $value . '"'; 
     } 
    $mysqlQuery .= $insert; 
    $mysqlQuery .= ') VALUES ('; 
    $mysqlQuery .= $values; 
    $mysqlQuery .= ')'; 
    return $mysqlQuery; 
} 

$db->query($queryArray["pages"]); 

它是更多鈔票使用事先準備好的聲明,然後就跳過某些字段或類似的東西?

+2

看看ORM工具,與ORM,你可以專注於你的數據結構,而不是他們的保存方式。我愛學說ORM – slash28cu

+0

昨天我正在讀到教條2的api。這聽起來很酷。但是我認爲將它應用到我的小CMS系統是不值得的,因爲它只有一個它想要存儲到數據庫中的對象。 –

回答

1

如果您在表格定義中設置了默認值,則可以在插入時省略該值。

檢查以下頁面瞭解更多信息的默認值:

http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

+0

So @jmack如果我有這樣的話: '$ stmt = $ db-> prepare(「INSERT INTO pages(users_id,pagename,seo_pagetitle,seo_description,seo_keywords,seo_robots,seo_canonical,page_type)VALUES(?,?,?,? ,?,?,?,?)「) 如果我們說我沒有最後2個字段的值,那麼你會如何綁定參數? –

+0

您只需完全省略最後兩個字段。所以像'$ stmt = $ db-> prepare(「INSERT INTO pages(users_id,pagename,seo_pagetitle,seo_description,seo_keywords,seo_robots)VALUES(?,?,?,?,?,?)」) –

+0

您仍然必須使用像createInsertStm($ arr,$ table)這樣的函數來創建語句。如果你有時有最後的領域有時不是 –