-1

我用来运行简单 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

4 回答 4

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');


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

于 2013-09-24T13:24:58.790 回答
1

有没有什么方法可以在一行代码中使用面向对象的风格?

当然。
这正是面向对象的风格。

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

@Touch's 的回答绝对正确,但当然这只是一个草图。必须扩展这样的类以具有您需要的所有方法:

说,要从表中获得一列,

$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);

这是我正在谈论的一个类的示例。,你已经可以使用了。

于 2013-09-24T14:21:23.217 回答
-1

没有什么能阻止你使用

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

典型名称有:

  • $a--$result
  • $b--$row
  • $c--$column
于 2013-09-24T13:02:52.750 回答
-1

你应该在 fetch(); 之前检查这个查询。

我建议使用这个:

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

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

于 2013-09-24T13:08:12.417 回答