如何有效地编写这些语句?

时间:2016-03-07 14:46:39

标签: php mysql

我在代码中为每个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. 什么是更有效的写作方式?
  2. 我已经尝试过选择列数,然后在for循环中使用它,但是如果没有更多的代码,它最终会得到尽可能多的代码。

    1. 另外,我使用sql_query在数据库中查询列,并返回一个对象。然后我必须做sql_fetchrow来获取实际值。有没有办法一次性完成这项工作?
    2. 我为此使用了一个表,它看起来像这样:

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

      我选择的列是活动的,id是form_id。我用它来查看哪些表格是活动的,哪些不是。

4 个答案:

答案 0 :(得分:0)

有一种方法可以将两个查询作为一个执行,并获取一个对象而不是两个。你应该使用参数化的查询,但是对于概念验证,我会以你的查询为基础

$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'];

答案 1 :(得分:0)

由于两个值都在同一个表中,存储为实体,我将使用以下技巧: (一个声明)

SELECT max(x.first)AS firstname,max(x.last)AS lastname FROM( SELECT列AS首先,null AS最后FROM表WHERE id = 1 全联盟 SELECT null AS首先,列AS最后FROM表WHERE id = 2 )x

我是从头开始写的,所以没有测试过。但它应该工作。结果将是一个整齐的行,其中firstname和lastname作为该行中的单独字段。

答案 2 :(得分: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');

这很简单。

答案 3 :(得分:-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@email.com');
$sth->execute();

上面的代码使用了命名占位符,这样PDO可以让您远离许多漏洞,因为它可以让您远离MySQL注入。为了让你开始看看netttus的这个教程,他们已经很好地解释了这一点,本文将解释你所有关于PDO的困境

参考:PHP PDO MySQL Queries