Mysqli查询在一行

时间:2013-09-24 12:58:36

标签: php mysql sql variables mysqli

我用来运行简单SQL查询的当前过程如下:

$a = $mysqli->query("SELECT column FROM table");
$b = $a->fetch_assoc();
$c = $b["column"];

这使用了3个不同的变量名称,试图找到合适的名称令人沮丧。 我认为在程序风格上,我可以将它分为两​​行,而不是三行:

$a = mysql_fetch_assoc(mysql_query("SELECT column FROM table"));
$b = $a["column"];

是否有任何方法可以在一行代码中使用面向对象的样式?

4 个答案:

答案 0 :(得分:4)

为什么不使用已经使用的OOP?如果我没弄错,你可以使用立面设计模式。这不仅仅是一行代码,而是一次写入。

创建一个对象进行查询。


//This is just a rough idea
class SimpleQuery {

    protected $mysqli;

    function __construct() {
       //Get a connection using whatever way you want
    }

    /**
     * @param string $query The query to execute
     * @param string $field The field to return(optional)
     * @return mixed
     */
    function query($query, $field = NULL) {

      $a = $this->mysqli->query($query);
      $b = $a->fetch_assoc($a);

      //Obviously this function needs to be adjusted to do what you seek, get multiple rows perhas
      if ($field) {
         return $b[$field];
      } else {
         return $b;
      }

    }

}


然后你可以简单地说:



$simpleQuery = new SimpleQuery();

$dbData = $simpleQuery->query('SELECT column FROM table','column');


不知道这对你有用,但值得写。创建对象的原因是可重用的。 : - )

答案 1 :(得分:1)

  

是否有任何方法可以在一行代码中使用面向对象的样式?

不确定。
这就是面向对象的风格。

但是,你不太了解面向对象风格的想法 实际上,这个想法不是将一些OO方法放在一起以获得一些笨拙和不可靠的构造,而是来创建一个类,它将具有满足您所有需求的方法。强>

@ Touch的答案完全正确,但当然这只是一个草图。必须扩展这样的类以获得所需的所有方法:

说,要从表中获得一列,

$a = $db->getOne("SELECT column FROM table LIMIT 1");

或者排成一行:

$row = $db->getRow("SELECT * FROM table LIMIT 1");

或所有行

$data = $db->getAll("SELECT * FROM table");

您可能会注意到,这些片段不仅比其他答案的愚蠢方法更短,而且还具有错误报告,查询记录,分析以及已经实现的许多其他有用的东西。

您还应该考虑占位符支持是必须的!否则所有这些内容将完全无用。请注意,基于OO的专用解决方案是将代码保持在一行中的唯一方法:使用原始API方法,您最终不会使用一种方法,而是使用十几行至少。

然而,这样的课程可以使单行人员保持正确:

$name = $db->getOne('SELECT name FROM table WHERE id = ?i',$_GET['id']);
$data = $db->getInd('id','SELECT * FROM ?n WHERE id IN ?a','table', array(1,2));
$data = $db->getAll("SELECT * FROM ?n WHERE mod=?s LIMIT ?i",$table,$mod,$limit);

Here is an example of a class I am talking about.,您已经可以使用了。

答案 2 :(得分:-1)

没有什么能阻止你使用

形成
$mysqli->query($query)->fetch_assoc()["column"];

典型名称是:

  • $a - $result
  • $b - $row
  • $c - $column

答案 3 :(得分:-1)

您应该在fetch();

之前检查此查询

我建议使用这个:

    $query = mysql_query("SELECT column FROM table");
    if ($query)
    {
       $data = mysql_fetch_assoc($query);
    }
    else
    {
     echo mysql_error($query);
    }

如果你将使用一行mysql查询获取结果,那么如果查询失败,你就会遇到调试问题。