2016-03-07 67 views
-2

我有這三個陳述,我在我的代碼中重複每個id或變量。如何有效地編寫這些語句?

$firstname_sql = $db->sql_query('SELECT column FROM table WHERE id = 1'); 
$lastname_sql = $db->sql_query('SELECT column FROM table WHERE id = 2'); 
etc.. 

$firstname_row = $db->sql_fetchrow($firstname_sql); 
$lastname_row = $db->sql_fetchrow($lastname_sql); 
etc.. 

$template->assign_var('FIRSTNAME', $firstname_row['variables']; 
$template->assign_var('LASTNAME', $lastname_row['variables']; 
etc.. 
  1. 什麼是寫這些的更有效的方法?

我試過選擇列數並在for循環中使用該id,但它最終會變得儘可能多,如果沒有更多代碼,就像我現在一樣。

  1. 此外,我使用sql_query查詢數據庫的列,它返回一個對象。然後我必須做sql_fetchrow才能獲得實際的值。有一種方法可以一次完成此操作嗎?

我使用一個表,這個和它看起來像這樣:

module_id, int, primarykey 
form_id, int, primarykey 
form_name, varchar 
active, int 

我選擇是積極的立柱,id是form_id。我正在使用它來查看哪些表單處於活動狀態,哪些不是。

+7

'SELECT id,column FROM table WHERE id IN(1,2)'would be a single query。 – h2ooooooo

+0

你能發表你正在使用的表的描述嗎? – stevenvanc

+0

@stevenca添加 – Kenan

回答

0

好吧,這就是我最終做到的。

我創建了一個帶有id和佔位符(模板變量)參數的函數。

function activeForm($id, $placeholder) { 
    $active = $db->sql_fetchrow($db->sql_query('SELECT column FROM table WHERE id = ' . $id)); 
    $template->assign_var($placeholder, $column['column']; 
} 

然後我調用該函數

activeForm(1, 'FIRSTNAME'); 

這麼簡單。

+0

但是現在你仍然對1個變量執行1個語句嗎?認爲你的問題是:如何有效地寫出聲明!? – stevenvanc

-1

從你的問題我猜你想重新準備好的陳述或 - 如何正確參數化你的查詢。

使用PDO建立到MySQL連接:

$dbh = new PDO('mysql:host='.HOST.';dbname='.DATABASE,USERNAME,PASSWORD); 

就是這樣,建立連接,你可以重用$dbh例如用於執行查詢來從一個表的用戶,結果你只需要兩行的代碼。

$sth = $dbh->query('SELECT id,name,email FROM users'); 
$user = $sth->fetch(PDO::FETCH_ASSOC); 

現在$user將具有作爲關聯數組獲取的所有值。

要將值插入數據庫中,您需要執行以下操作。

$sth = $dbh->prepare('INSERT INTO users(name,email) VALUES(:name, :email)'); 
$sth->bindParam(':name', 'My Name'); 
$sth->bindParam(':email', '[email protected]'); 
$sth->execute(); 

上面的代碼使用命名佔位符,這樣PDO將讓你從衆多的安全漏洞,因爲它會讓你從MySQL注入了。讓你開始看看本教程由netttus,他們已經解釋得很好聽,本文將介紹關於PDO所有的難題

參考:PHP PDO MySQL Queries

+0

不是downvoter,但這不回答問題。 1)你不知道OP是否已經用PDo使用某些DB類; 2)你至少可以用你的方法提供解決方案,而不是給出一個隨機的例子 –

0

還有就是要執行這兩個查詢爲一體的方式,並獲得一個對象而不是兩個。您應該使用paramatized查詢,但對於證據的概念,我會用你的查詢作爲基礎

$query = $db->sql_query('SELECT table1.column AS firstName, table2.column AS secondName 
    FROM table table1, table table2 
    WHERE table1.id = 1 
    AND table2.id = 2'); 

$names = $db->sql_fetchrow($query); 
$template->assign_var('FIRSTNAME', $names['firstName']; 
$template->assign_var('LASTNAME', $names['lastName']; 
0

由於兩個值都在同一個表,存儲爲實體的,我會用下面的技巧: (一個聲明)

SELECT max(x.first)AS firstname,max(x。最後)AS姓氏 FROM( SELECT列第一,NULL作爲最後from表where ID = 1 聯盟所有 SELECT NULL作爲第一,列最後FROM表WHERE ID = 2 )×

我寫了這從頭開始,所以沒有對它進行測試。但它應該工作。結果將是一行整齊的行,其名字和姓氏是該行中的單獨字段。