Re: Doubts concerning a general Insert method

From: Date: Mon, 13 Jul 2009 12:19:13 +0000
Subject: Re: Doubts concerning a general Insert method
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-295314@lists.php.net to get a copy of this message
2009/7/13 MEM <talofo@gmail.com>: > Hello, I'm trying to understand a general CRUD class that I've seen here: > http://www.phpro.org/classes/PDO-CRUD.html > > I'm learning PHP and I have some doubts on this method to generally insert > data into DB. The class name is crud and here is the method: > > public function dbInsert($table, $values) { > >        $this->conn(); > >        $fieldnames = array_keys($values[0]); > >        $size = sizeof($fieldnames); > >        $i=1; > >        //construction of the prepared statment >        $sql = "INSERT INTO $table"; > >        $fields = '( ' . implode(' ,', $fieldnames) .. ' )'; > >        $bound = '(:' . implode(', :', $fieldnames) .. ' )'; > >        $sql .= $fields.' VALUES '.$bound; > >        //prepares statement e saves it on variable $stmt >        $stmt = $this->db->prepare($sql); > >        foreach($values as vals) >        { >                $stmt->execute($vals); >        } > } > > > To place values on the DB we do: > > $crud = new crud(); > > $values = array >            ( >                array('animal_name'=>'bruce', > 'animal_type'=>'dingo'), >                array('animal_name'=>'bruce', > 'animal_type'=>'kangaroo'), >            ); > > $crud->dbInsert('animals', $values); > > > > > > The doubts: > 1) Names convention question: > Isn't more correct to call $columname, instead of $fieldname ? The two terms are interchangeable in the context of a database. > 2) Why do we have this? >  $i=1 It's not used so I'd guess it's a remnant from an older version of the method. Safe to remove it. > 3) Here: > $fieldnames = array_keys($values[0]); > > We are keeping on variable $fieldnames, the key value of the $values array, > when this array is on the position 0 ? And what is *actually* the value > returned, considering our array? > > $values = array >            ( >                array('animal_name'=>'bruce', > 'animal_type'=>'dingo'), >                array('animal_name'=>'bruce', > 'animal_type'=>'kangaroo'), >            ); You can use the var_dump function to dump the contents of $fieldnames after that line has been executed and see for yourself. In this case let's break it down... $values[0] will give you the first element of $values, namely array('animal_name'=>'bruce', 'animal_type'=>'dingo'). array_keys will return an array containing the keys from the passed array, so in this case you'll get array('animal_name', 'animal_type'). > 4) Here: > foreach($values as $vals) >        { >                $stmt->execute($vals); >        } > > We are telling that, for each (line/element/index ???) of $values array, the > actual value will be "given"(?) to vals, and the pointer goes to the next > (line/element/index)... ? > > We then execute the prepared statement, but I don't get what are we passing > as a param? I mean, what kind of think does the execute PDO method expects > as a param? > Why $stmt->execute($vals); and not only $stmt->execute(); ? After it's finished building $sql use var_dump to look at it. You'll see that the values are specified as :animal_name and :animal_type. The : indicates to PDO that these are replaceable values. The foreach will go through the $values array and for each row it will pass the data (e.g. array('animal_name'=>'bruce', 'animal_type'=>'dingo') for the first time round the loop) to the execute function which will effectively replace those elements in the SQL statement and execute it. For more info I suggest you Google for "PDO prepared statements" for further reading. -Stuart -- http://stut.net/

« previous php.general (#295314) next »