2013-04-11 69 views
0

情況我會通過查詢這個功能query("SELECT * FROM table_name");如何插入其中MySQL查詢

而且功能

public function query($sql) { 

     $resource = mysql_query($sql, $this->link_web); 

     if ($resource) { 
      if (is_resource($resource)) { 
       $i = 0; 

       $data = array(); 

       while ($result = mysql_fetch_assoc($resource)) { 
        $data[$i] = $result; 

        $i++; 
       } 

       mysql_free_result($resource); 

       $query = new stdClass(); 
       $query->row = isset($data[0]) ? $data[0] : array(); 
       $query->rows = $data; 
       $query->num_rows = $i; 

       unset($data); 

       return $query; 
      } else { 
       return true; 
      } 
     } else { 
      trigger_error('Error: ' . mysql_error($this->link_web) . '<br />Error No: ' . mysql_errno($this->link_web) . '<br />' . $sql); 
      exit(); 
     } 
    } 

我想在SELECT查詢添加tenent_id = '1'也爲INSERT查詢。同樣我需要爲UPDATE做。

我要帶上像查詢此

SELECT * FROM table_name WHERE tenent_id = 1 and user_id = 1 

INSERT INTO table_name('tenant_id, user_id') VALUE('1','1') 

UPDATE table_name SET user_id = 1 WHERE tenant_id = '1' 

誰能給我有關如何插入在選擇tenant_id,INSERT和UPDATE提前

感謝

+2

爲什麼你有'WHERE'在'INSERT'查詢? – George 2013-04-11 11:19:10

+0

它很難理解。請給出更多的細節.. – 2013-04-11 11:23:31

+0

你明白什麼插入和更新意味着什麼?如果插入這意味着您將新行添加到數據庫(就像您在第二個查詢中那樣)。當你想改變數據庫中已經存在的某個id的數據時,那就是更新。 – 2013-04-11 11:24:36

回答

0

這是更好的做法,想法使用正確的mysql函數而不僅僅是查詢函數。

例如,如果您通過數據庫中的許多項目要循環,你可以使用while循環:

$query = mysql_query("SELECT * FROM table WHERE type='2'"); 
while($row = mysql_fetch_array($query)){ 
    echo $line['id']; 
} 

這將呼應的是有型數據庫中的所有ID 2

同樣的原理是當你有一個對象時,使用mysql函數,你可以指定你想要數據返回的方式。上面我用數組返回它。在這裏,我要返回一行作爲一個對象:

$query = mysql_query("SELECT * FROM table WHERE id='1'"); 
$object = mysql_fetch_object($query); 
echo $object->id; 
echo $object->type; 
echo $object->*ANY COLUMN*; 

這將作爲返回: 1. 2. 無論該列的值是


要插入您的數據,您不需要執行「query()」。你可以簡單的使用mysql_query($ sql)。 它會讓你的生活更輕鬆。

此外,它最好在函數中運行一個查詢,這樣你可以正確處理數據。

mysql_query("INSERT..."); 
mysql_query("UPDATE..."); 
mysql_query("SELECT..."); 

希望這會有所幫助。

+0

請不要暗示mysql_ *函數,因爲它們已被正式棄用。 – 2013-04-11 11:37:53

+0

我知道,通過使用一個初學者的單一功能,他們是必要的。除非你想把他介紹給PDO? – Scowen 2013-04-11 12:26:27

0

簡單的答案是:只需將條件添加到您的查詢。致電query("SELECT * FROM table_name WHERE tenant_id = 1 and user_id = 1")

如果您擔心轉移傳遞給SQL查詢(您應該是!)的參數,則可以手動自行完成,例如,

$query = sprintf("SELECT * FROM table_name WHERE tenant_id = %d", intval($tenant_id)); 
query($query); 

或者更好地利用編寫mysqli擴展提供的語句(的mysql_query是deprecated反正):

$stmt = $mysqli->prepare("SELECT * FROM table_name WHERE tenant_id = ?"); 
$stmt->bind_param("i", $tenant_id); 
$stmt->execute(); 
$result = $stmt->get_result(); 
while ($row = $result->fetch_array(MYSQLI_ASSOC)) { 
    // ... 
} 

如果我還沒有回答你的問題,你可以使用庫來處理您的查詢,如dibi

$result = dibi::query('SELECT * FROM [table_name] WHERE [tenant_id] = %i', $id); 
$rows = $result->fetchAll(); // all rows 

最後一個選項是我將使用的,您不需要編寫自己的查詢處理函數並免費獲取查詢參數綁定。在你的情況,你可以利用逐步構建查詢,從而使WHERE條件是不是你的基本查詢的一部分:

$query[] = 'SELECT * FROM table_name'; 
if ($tenant_id){ 
    array_push($query, 'WHERE tenant_id=%d', $tenant_id); 
} 
$result = dibi::query($query); 
+0

我有你的主意,但我有MySQL的查詢1000。我不能編輯所有查詢中的「條件」。使用函數QUERY()我想進行更改。 – user2269905 2013-04-11 11:59:55

+0

@ user2269905 Dibi會通過執行'$ query = array($ query)來解決您的問題; array_push($ query,'WHERE ...')'左右。如果不使用ORDER BY或WHERE之後的東西,只需將WHERE條件附加到查詢中,並通過其他函數將插入作爲特例處理。真的沒有其他的解決方案 - 你不想自己實現一個MySQL查詢解析器。 – Mifeet 2013-05-28 08:25:36