Mysqli_fetch_array nic nevrátí, array v PHP8 vypíše chybu – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Mysqli_fetch_array nic nevrátí, array v PHP8 vypíše chybu – PHP – Fórum – Programujte.comMysqli_fetch_array nic nevrátí, array v PHP8 vypíše chybu – PHP – Fórum – Programujte.com

 

Novosad1351
~ Anonymní uživatel
2 příspěvky
2. 12. 2021   #1
-
0
-

Používám na celém webu výpis z mySQLi do array. Jenže přechodem na PHP8, pokud je array prázdný a nic neobsahuje, dostanu chybu. Dalo by se to opravit pomocí isset nebo jiného pravidla, ale to bych musel předělat desítku né-li stovku php souborů. Vím, měl jsem to vyřešit jinak už předtím.


Dá se nějak ošetřit výstup z mysqli_fetch_array, který se generuje do array, kdy pokud bude nums = 0, že bych vytvořil array s null? Bohužel ale nevím jak, protože jakmile na výstupu z mySQLi (SELECT id, name, .....) nebo SELECT * FROM .... nic není, tak mysql_fetch_array nic nevypíše a proto nevím, kolik array se má vytvořit s null, aby to odpovídalo výpisu např. echo $vypis[0]; nebo echo $vypis[22];

Poradíte mně prosím ? Strašně moc, moc, moc děkuji.

Nahlásit jako SPAM
IP: 217.112.172.–
Kit+15
Guru
2. 12. 2021   #2
-
0
-

#1 Novosad1351 

echo $vypis[22] ?? "";
Nahlásit jako SPAM
IP: 46.135.66.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Novosad1351
~ Anonymní uživatel
2 příspěvky
2. 12. 2021   #3
-
0
-

#2 Kit
Omlouvám se, upřesním. Používám function na výpis dat z mySQLi do mysqli_fetch_array, tak že není problém to doladit na straně samotné function, kde return dávám array. Zde bych to právě potřeboval ošetřit, aby i když mysqli_fetch_array ni nevypsal, tak potřebuji ošetřit, aby vždy vznikl array, ale s null, aby to PHP8 následně vzalo.

function vypisSQL($conn, $dotaz) .... a pro výpis pak používám $dotaz = vypisSQL(......) a provádím echo $dotaz[0] atd.

Nahlásit jako SPAM
IP: 217.112.172.–
Kit+15
Guru
2. 12. 2021   #4
-
0
-

#3 Novosad1351
Když použiješ operátor coalesce, tak je jedno, zda toto pole existuje nebo ne.

Nahlásit jako SPAM
IP: 46.135.66.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
4016 příspěvků
2. 12. 2021   #5
-
0
-

 Co jsi nasel googlem nebo v dokumentaci? Reseni pri trose stesti do 5-10 min...
php.net/mysqli_fetch_array

function vypisSQL($conn, $dotaz)
{
... mySQLi (SELECT id, name, .....)
// nebo SELECT * FROM 
... mysql_fetch_array
}

... a pro výpis pak používám $dotaz = vypisSQL(......) a provádím echo $dotaz[0] atd.

No, to jsi teda moc toho nenapsal, ze jo? Z te funkce... To hlavni ti schazi, jakym zpusobem s tim pracujes. Ja treba tam mivam takoveto konstrukce:
 

$list = array();
while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
    $list[] = $row;
}
return $list;
Nahlásit jako SPAM
IP: 2001:718:2601:258:483a:dbbd:e074:2a73...–
Kit+15
Guru
2. 12. 2021   #6
-
0
-

#5 peter
V podstatě jsi tím naznačil, že výsledek dotazu se nemá zpracovávat jako pole, ale jako seznam. Odpadne tím spousta problémů.

Nahlásit jako SPAM
IP: 213.175.51.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
2. 12. 2021   #7
-
0
-

#3 Novosad1351
Máš nějaký speciální důvod, proč obvyklých funkcí mysqli_fetch_assoc() nebo mysqli_fetch_object() používáš poměrně nepraktické mysqli_fetch_array()?

Nahlásit jako SPAM
IP: 213.175.51.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
4016 příspěvků
3. 12. 2021   #8
-
0
-

No, mne ten dotaz prijde divny. Neni uplne jasne, co kdy dela, jakym kouskem kodu to zpracovava.
Ja tam mam mivam 1 funkci, ktera mi vraci seznam vsech radku a pak to z ni taham do dalsiho kodu. Pak si muzu u ni prepsat vystup, jaky chci a bude platit pro cely program. Coz, nejspis dela taky, pomoci
vypisSQL(), ktere zminil az v prispevku #2. Timhle zpusobem budeme z nej taha informace do vanoc a pres #200 prispevku :)

Ja ji mam obvykle soucasti class sql

selectAll <- selectItems <- query
selectOne <- selectItems <- query

selectItems() - mi vyrobi ten list z query
All() / One() je jen formatovani, kdyz chci jen posledni radek, abych tam nemusel psat array[0]
query() - je nejaka vlastni funkce, ktere predam sql dotaz, nejak se popere s vypisem chyb a vrati $result

No, a takhle mam reseny class pro ldpa, mysql, oracle, ...
Skoda, ze u php padl projekt z-driveru. Ten prave resil to univerzalni rozhrani. Clovek nemusel hledat v dokumentaci, jaky vysledek mu vlastne prikaz vrati. A kazdy driver (fsocket, file, sql) vraci jinaci :)
 

Nahlásit jako SPAM
IP: 2001:718:2601:258:508c:2756:9fc0:a881...–
GAddy
~ Anonymní uživatel
2 příspěvky
26. 1. 2022   #9
-
0
-

mysqli_fetch_array() nevrátí pole, pokud je výsledek dotazu NULL. Takže nejdříve ověříme, jestli se něco vrátilo a teprve potom voláme mysqli_fetch_array().

$conn = mysqli_connect(server, db_username, db_password, db_name);
$query = "SELECT ....... ";
$result = mysqli_query($conn, $query);

$rows = mysqli_num_rows($result);

if ($rows > 0) {
  $data = mysqli_fetch_array($result);
} else {
  $data = array();
}
mysqli_free_result($result);
mysqli_close($conn);

Ale jak už někdo výše psal, použití mysqli_fetch_array() je opravdu ne zrovna šťastné. I mysqli_fetch_assoc() udělá lepší službu a ještě lepší je přechod z procedurálu na OOP.

Nahlásit jako SPAM
IP: 31.30.173.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 39 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý