[ Prekognisticar @ 29.07.2014. 20:06 ] @
Gde sam pogresio?
Program nece da mi cita podatke iz baze
U MySql bazi su podaci u obliku:
- Ime
- Prezime
- E-mail

Kada preko forme odaberem ime (jedno od dva ponudjena) program bi trebao da izbaci e-mail osobe.
Pretpostavlajm da je problem sa metodom fetch(), tj da je nisam ispravno upotrebio.
Inace ovo je iz knjige "PHP for absolute beginners" iz 2009. jedan od osnovnih primera konektovanja na bazu preko PDO.
Pre par godina naucio sam osnove povezivanja preko mysql() i mysqli() ali sam zbog drugih stvari batalio. Sada bih hteo da se vratim u materiju i krenem profesionalno da se bavim. Vidim da je PHP napredovao i sve mi se ovo OOP cini neverovatno konfuznim. Zato sam uzeo knjige da probam od pocetka.
Svaki savet je dobrodosao

Code:
<?php
    if($_SERVER['REQUEST_METHOD']=='POST')
        {
         // Open a MySQL connection
         $dbinfo = 'mysql:host=localhost;dbname=Galileo15Feb01';
         $user = 'root';
         $pass = '';
         $link = new PDO($dbinfo, $user, $pass);

         // Create and execute a MySQL query
         $sql = "SELECT email FROM email_list WHERE first_name=?";
         $stmt = $link->prepare($sql);

         if($stmt->execute(array($_POST['nejm'])))
            { echo "inside if";
             while($row = $stmt->fetch()) {
                echo "inside while";
                printf("mejl: %s<br />", $row['email']);
              }
             $stmt->closeCursor();
            }
        }
        else {
?>
<form method="post">
    <label for="nejm">Select first name:</label>
    <select name="nejm">
        <option value="1">Stojan</option>
        <option value="2">Djovak</option>
    </select>

    <input type="submit" />
</form>


<?php } // End else ?>


Izbacuje poruku "inside if". Ne stampa "inside while"!
[ ivan.a @ 30.07.2014. 08:54 ] @
Probaj ovako:
Code:

       $stmt  = $db->prepare("SELECT email FROM email_list WHERE first_name=:name ");
       $stmt->bindValue(':name', $_POST['nejm'], PDO::PARAM_STR); 
       $result = $stmt->execute();


Testiraj da li se uopšte konektuješ na bazu:

Code:

try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    foreach($dbh->query('SELECT * from FOO') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

(izmeni parametre koji su potrebni za tvoje podatke iz baze)
[ Prekognisticar @ 30.07.2014. 16:21 ] @
Drugi deo mi je pomogao. Uspesno se konektovao i izlistao podatke.

Medjutim, prvi deo nisam siguran da razumem. Pokusao sam na nekoliko nacina da ubacim u svoj kod ali mi je izbacio poruku "internal server error".

npr
Code:

    if($_SERVER['REQUEST_METHOD']=='POST')
        {
         // Open a MySQL connection
         $dbinfo = 'mysql:host=localhost;dbname=Galileo15Feb01';
         $user = 'root';
         $pass = '';
         $link = new PDO($dbinfo, $user, $pass);

         // Create and execute a MySQL query
         //$sql = "SELECT email FROM email_list WHERE first_name=?";
         $stmt = $link->prepare("SELECT email FROM email_list WHERE first_name=:name ");
         $stmt->bindValue(':name', $_POST['nejm'], PDO::PARAM_STR);
         $result = $stmt->execute();

         if($result)
            { echo "inside if";
             while($row = $stmt->fetch() {

                echo "inside while";
                printf("mejl: %s<br />", $row['email']);
              }
             $stmt->closeCursor();
            }
        }
        else { echo "inside else";


[ ivan.a @ 02.08.2014. 15:04 ] @
Nisi zatvorio tag posle else (možda si izostavio prilikom pisanja koda ovde):

Code:
else { echo "inside else";


treba da bude:
Code:
else { echo "inside else"; }


I za svaki slučaj zameni:
Code:
while($row = $stmt->fetch() {


sa

Code:
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {


Ukoliko ti ne treba više ovaj upit izbaci sledeće:
Code:
$stmt->closeCursor();
[ Prekognisticar @ 05.08.2014. 00:14 ] @
D, izostavio sam nepotreban kod, pa izgleda kao da je nezatvorena zagrada ...
Celokupan kod, modifikovan prema uputstvu:
Code:

<?php
if($_SERVER['REQUEST_METHOD']=='POST')
       {
    // Open a MySQL connection
    $dbinfo = 'mysql:host=localhost;dbname=Galileo15Feb01';
    $user = 'root';
    $pass = '';
    $link = new PDO($dbinfo, $user, $pass);

    // Create and execute a MySQL query
    
    $stmt = $link->prepare("SELECT email FROM email_list WHERE first_name=:name");
    
    $stmt->bindValue(':name', $_POST['nejm'], PDO::PARAM_STR);    

           echo "outside if";    

    if($stmt->execute(array($_POST['nejm'])))
        {
                       echo "inside if";
         while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                                 echo "inside while";
             printf("Email: %s<br />", $row['email']);
            }
        $stmt->closeCursor();
        }
    }
     else {
                     echo "inside else";
    ?>
<form method="post">
    <label for="nejm">Select first name:</label>
    <select name="nejm">
        <option value="1">Stojan</option>
        <option value="2">Djovak</option>
    </select>

    <input type="submit" />
</form>
<?php } // End else ?>


Ovo izbacuje poruku "outside if"

Ako unutar if-a izbacim "array($_POST['nejm'])" tj napisem samo "if($stmt->execute())" prolazi if i na pomenutu poruku (outside if) dopisuje "inside if".
Medjutim ne printuje bazu!
[ svepomalo @ 05.08.2014. 00:16 ] @
"nejm" - svaka cast za originalnost :)