我的sql语句返回一个包含2个关联键的数组,上下。
query = 'SELECT `up`,`down` FROM `records` WHERE `id`=id'
有没有办法可以在一行中设置两个变量,如:
$up, $down = 'SELECT `up`,`down` FROM `records` WHERE `id`=id'
这样上下会取相应的值吗?
答案 0 :(得分:3)
mysqli::query()
的返回值不是一个关联数组,而是一个'结果集'。如果查询失败,你甚至不会得到,但是FALSE
。所以尽管你可以做到
list($up, $down) = $db->query ("SELECT up, down FROM records WHERE id='id';")->fetch_all();
这不会让您检查查询是否真的有效,所以最好将其拆分出来。
答案 1 :(得分:2)
如果在进行SQL调用之后,你会得到一个像这样的关联数组:
array(
'up' => 'foo',
'down' => 'bar'
);
然后,您可以使用extract()
获取变量$up
和$down
。
所以你可以这样做:
// no need to initialize $up and $down
extract(exec_query()); // asusming exec_query() returns the assoc array defined above
echo $up; // will print 'foo'
echo PHP_EOL;
echo $down; // will print 'bar'
PS - 虽然可以做到这一点,但从可读性的角度来看,它确实很糟糕,我强烈建议不要这样做。
答案 2 :(得分:1)
list()
允许您从一个函数调用中分配多个值,但是,在您的情况下,您还需要执行查询并从数据库服务器获取数据。
例如:
list($up, $down) = mysqli_fetch_array($queryResult, MYSQLI_ASSOC);