Moja instrukcja sql zwraca tablicę 2 kluczy asocjacyjnych, w górę iw dół.
query = "SELECT `up`,`down` FROM `records` WHERE `id`=id"
czy w jeden sposób mogę ustawić obie zmienne, takie jak:
$up, $down = "SELECT `up`,`down` FROM `records` WHERE `id`=id"
tak, że góra i dół przyjmą odpowiednie wartości?
Odpowiedzi:
2 dla odpowiedzi № 1Jeśli po wywołaniu SQL otrzymasz tablicę asocjacyjną taką jak ta:
array(
"up" => "foo",
"down" => "bar"
);
Następnie możesz użyć extract()
aby uzyskać zmienne $up
i $down
.
Więc możesz to zrobić:
// 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 - Chociaż można to zrobić, jest to naprawdę złe z punktu widzenia czytelności i zdecydowanie odradzam.
3 dla odpowiedzi № 2
Wartość zwracana z mysqli::query()
nie jest natychmiast tablicą asocjacyjną, ale „zestawem wyników”. A jeśli zapytanie nie powiedzie się, nawet tego nie otrzymasz, ale FALSE
. Więc kiedy możesz to zrobić
list($up, $down) = $db->query ("SELECT up, down FROM records WHERE id="id";")->fetch_all();
nie pozwala to sprawdzić, czy zapytanie rzeczywiście działało, więc lepiej go rozdzielić.
1 dla odpowiedzi nr 3
list()
pozwala przypisać wiele wartości z jednego wywołania funkcji, jednak w twoim przypadku musisz również wykonać zapytanie i pobrać dane z serwera bazy danych.
Na przykład:
list($up, $down) = mysqli_fetch_array($queryResult, MYSQLI_ASSOC);