Pereiti prie turinio

[PHP] PDO problema su array


Rekomenduojami pranešimai

Sveiki, turiu tokią bėda su PDO.

 

Naudoju tokį kodą:

$query = $db->prepare("SELECT * FROM atsiliepimai WHERE patvirtinta = '1' ORDER BY id DESC");
$query->execute();
$result = $query->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
echo $row['id'];
}

Ir gaunasi taip, kad visada nėra vieno rezultato. Pavyzdžiui jeigu lentelėje tik vienas rezultatas pagal tokius kriterijus, tai jo net nerodo. Tik pridėjus naują kažkokį rezultatą atitinkama kriterijams pasirodo senasis arba naujasis. Niekaip nesuprantu kodėl taip yra. Gal reikia kažkokios kitokios funkcijos fetch'inimui?

Redagavo SKIgnas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

O kam naudot prepare, jeigu nieko nebindini? Ar neišmeta jokios NULL reikšmės pabandyk žiūrėt?

$query = $db->query("SELECT * FROM atsiliepimai WHERE patvirtinta = '1' ORDER BY id DESC");
$result = $query->fetchAll();
foreach ($result as $row)
  var_dump($row['id']);

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O kam naudot prepare, jeigu nieko nebindini? Ar neišmeta jokios NULL reikšmės pabandyk žiūrėt?

$query = $db->query("SELECT * FROM atsiliepimai WHERE patvirtinta = '1' ORDER BY id DESC");
$result = $query->fetchAll();
foreach ($result as $row)
  var_dump($row['id']);

 

Na, ten dar pasidarau row tikrinimui

$row = $query->fetch();
if ($row > 0) {
...
}

Štai vieno ir nėra, nors lentelėje 4 įrašai atitinkantys kriterijus.

string(1) "3" 
string(1) "2" 
string(1) "0"

 

EDIT: Kažką ne taip buvau padaręs, dabar lyg ir veikia

Redagavo SKIgnas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

if ($row->rowCount() > 0) {

 

EDIT:

 

Pabandyk gal su while ciklu

$duom = $db->query("SELECT * FROM atsiliepimai WHERE patvirtinta = '1' ORDER BY id DESC");
while($row= $duom->fetch(PDO::FETCH_ASSOC)) {

Redagavo Arvis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai kažkas su užklausa negerai, atlik užklausą per phpmyadmin (jei tokį naudoji) ir pažiūrėk ar meta visus kiek reikia

 

Kažkokių nesąmonių buvau prisirašęs.. Dabar veikia taip:

 

$query = $db->query("SELECT * FROM atsiliepimai WHERE patvirtinta = '1' ORDER BY id DESC");
$result = $query->fetchAll(PDO::FETCH_ASSOC);
if ($result != false) {
foreach ($result as $row) {
...
}
}

 

Dabar viskas daug aiškiau. Prieš tai daug ką kitaip dariau.

 

Dar vienas klausimas.. Kada reikia naudot prepare?

Redagavo SKIgnas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dar vienas klausimas.. Kada reikia naudot prepare?

 

Tada, kada įterpi, atnaujini arba filtruoji duomenys pagal GET ir POST metodus bei naudoji prepared statements.

 

<?php
// Čia nėra jokios prasmės naudoti prepare() metodo, nes nėra jokios WHERE sąlygos. Naudojame elementariausią query() metodą.
$sth = $dbh->query('SELECT * FROM news');

// Čia jau turime WHERE sąlygą, todėl naudojame prepare() metodą.
$sth = $dbh->prepare('SELECT * FROM news WHERE id = :id LIMIT 1');
$sth->execute([':id' => $_GET['id']]); // PHP 5.4
$sth->execute(array(':id' => $_GET['id'])); // < PHP 5.4

// Duomenų įterpime niekas nesikeičia.
$stmt = $dbh->prepare('INSERT INTO comments (name, comment) VALUES (:name, :comment)');
$stmt->execute([':name' => $_POST['name'], 'comment' => $_POST['comment']]); // PHP 5.4
$stmt->execute(array(':name' => $_POST['name'], 'comment' => $_POST['comment'])); // < PHP 5.4

// Senasis (nerekomenduojamas) variantas:
$stmt = $dbh->exec('INSERT INTO comments (name, comment) VALUES ('.$_POST['name'].', '.$_POST['comment'].')');

Redagavo dragelis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tada, kada įterpi, atnaujini arba filtruoji duomenys pagal GET ir POST metodus bei naudoji prepared statements.

 

<?php
// Čia nėra jokios prasmės naudoti prepare() metodo, nes nėra jokios WHERE sąlygos. Naudojame elementariausią query() metodą.
$sth = $dbh->query('SELECT * FROM news');

// Čia jau turime WHERE sąlygą, todėl naudojame prepare() metodą.
$sth = $dbh->prepare('SELECT * FROM news WHERE id = :id LIMIT 1');
$sth->execute([':id' => $_GET['id']]); // PHP 5.4
$sth->execute(array(':id' => $_GET['id'])); // < PHP 5.4

// Duomenų įterpime niekas nesikeičia.
$stmt = $dbh->prepare('INSERT INTO comments (name, comment) VALUES (:name, :comment)');
$stmt->execute([':name' => $_POST['name'], 'comment' => $_POST['comment']]); // PHP 5.4
$stmt->execute(array(':name' => $_POST['name'], 'comment' => $_POST['comment'])); // < PHP 5.4

// Senasis (nerekomenduojamas) variantas:
$stmt = $dbh->exec('INSERT INTO comments (name, comment) VALUES ('.$_POST['name'].', '.$_POST['comment'].')');

 

Dėkui. O taip irgi tinka?

$query = $db->prepare("INSERT INTO nariai (vardas, ip, slaptazodis) VALUES (?, ?, ?)");
$query->execute(array($vardas, $ip, $pass));

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...