我用来运行简单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"];
是否有任何方法可以在一行代码中使用面向对象的样式?
答案 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);
答案 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查询获取结果,那么如果查询失败,你就会遇到调试问题。