| | |
| Stránka: 1 z 1
| [ Príspevkov: 4 ] | |
Autor | Správa |
---|
Registrovaný: 21.02.07 Prihlásený: 29.06.21 Príspevky: 150 Témy: 59 Bydlisko: Prievidza | Napísal arno: 29.03.2017 7:47 | |
|
Ahojte, trapim sa tu s jednym problemom ktoremu neviem prist na pricinu. Mam tuto jednoduchu cast kodu Kód: /// BackUp riadok ak 1 robi zalohu ak 0 nerobi $insertEquip = $conn->query("INSERT INTO ".$equip_type." (IPAddress, Name, Date, BackUp) VALUES ('".$ip_equip."','".$equip_name."','".$date_add."',true)"); if ( !$insertEquip ) { echo "Vyskytla sa nasledujúca chyba, pridanie neprebehlo korektne : "; echo $conn->error; exit; }
Kod pridava do db jednotlive zariadenia a ich IP adresu, povodne som mal nastavene IPAddress na UNIQUE aby som sa vyhol duplicite. Ale z nejakeho dovodu vznikla Duplicitna chyba niekedy pri vkladani novej IP aj ked v tabulke vobec nebola. Preto som zrusil UNIQUE a nastavil len INDEX na IP v php som len na test pridal aj tuto cast kodu Kód: $selectEquip = $conn->query("SELECT * FROM ".$equip_type." WHERE `IPAddress` = '".$ip_equip."'"); $selectRows = $selectEquip->num_rows;
A problem sa v podstate opakuje ako pri UNIQUE pri niektorych IP mi num rows vrati 1 ako by dostal zaznam z tabulky ze tam je ale pritom tam nie. Overoval som si to aj tak ze pred pridanim do DB som si cez phpmyadmina skusil SELECTom vytiahnut IP ktore planujem pridat ale ich nenaslo cize vratilo 0.Ale ked som to pridaval uz cez formular a teda hore uvedeny kod pri niektorych bola hodnota num_rows 1 a tym padom ho nepridalo. A tu je este nakoniec struktura tabulky kde sa data vkladaju Kód: CREATE TABLE `mikrotik` ( `ID` int(11) UNSIGNED NOT NULL, `IPAddress` varchar(15) COLLATE utf8mb4_unicode_ci NOT NULL, `Name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, `Date` date NOT NULL, `BackUp` tinyint(1) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Za kazdu radu alebo nasmerovanie k rieseniu problemu dakujem
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | Napísal killer: 29.03.2017 9:36 | |
|
1. Používaj na zistenie počtu záznamov priamo agragačnú funkciu [c] SQL:COUNT()[/c]. Nemusíš vyberať "všetky" záznamy a potom v PHP počítať, ak s nimi ďalej nerobíš a chceš len vedieť koľko ich je, databáza to urobí rýchlejšie za teba. Ak máš nastavený primárny kľúč na stĺpci ID, stačí takto: Kód: SELECT COUNT(*) AS count FROM " . $equip_type . " WHERE `IPAddress` = '" . $ip_equip . "'" Potom s tým pracuješ ako s normálnym "výsledkom", takže už nemôžeš testovať cez mysqli::num_rows (!!!), keďže tento SELECT vždy vráti výsledok - v stĺpci [c]count[/c] máš počet a ten skontroluješ na podmienku == 0 2. Pokiaľ by si chcel s tým záznamom, ktorý vyberieš niečo robiť, potom namiesto num_rows rob v PHP [c] count()[/c] a spočítaj priamo výsledky ktoré SELECT vráti. 3. Keď si to testoval v PHPMyAdmine, používal si SELECT, ktorý ti vrátilo toto PHP s názvom tabuľky a IP adresou z premenných $equip_type a $ip_equip, alebo si si napísal vlastný?
_________________ always is always wrong |
|
Registrovaný: 21.02.07 Prihlásený: 29.06.21 Príspevky: 150 Témy: 59 Bydlisko: Prievidza | Napísal autor témy arno: 30.03.2017 7:27 | |
|
Aha jasne prerobim to teda s funkciou COUNT() dakujem za radu.
Co sa tyka toho PHPMyAdminu v podstate som pouzil presne ten isty SELECT samozrejme s tym ze miesto premennych som zadal napevno tie udaje ktore som vedel ze budem vkladat potom aj cez PHP. Avsak tam mi SELECT vratil 0 ale z PHP uz potom 1.
Co som kukal aj stackoverflow.com tiez tam bol jeden prispevok ze podobne sa to spravalo pri vkladani jedinecnych IP Adries. Bolo tam spomenute ze problem moze byt problem v type dat (aj ich dlzke) plus potom kodovanie. Zmenil som na test aj dlzku a aj kodovanie na binarne ako spominali ale aj tak nepomohlo.
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
Vyskusaj, ci pomoze, ak budes ip adresy ukladat ako int (unsigned) cez inet_aton()
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
| Stránka: 1 z 1
| [ Príspevkov: 4 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|