2016-03-07 45 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 )×

我写了这从头开始,所以没有对它进行测试。但它应该工作。结果将是一行整齐的行,其名字和姓氏是该行中的单独字段。