Re: Doubts concerning a general Insert method

From: Date: Mon, 13 Jul 2009 14:16:39 +0000
Subject: Re: Doubts concerning a general Insert method
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-295325@lists.php.net to get a copy of this message
2009/7/13 MEM <talofo@gmail.com>: > >>     $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'). >> > > So... since $value is an associate array of arrays, we will get, on the first key, not an array > with "0, 1", like array(0,1); but array('animal_name','animal_type'), > yes? > When we use the implode over this array, we get: > animal_name, animal_type that is the string that will pass to be prepare using the PDO > prepare(). Indeed. >> 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. > > Yes. And normally, to fill those replaceable values, I was used to use bindParam(); > I like this bindParam method because we can then use PDO::PARAM_INT and PDO::PARAM_STR to more > accurately control the data type flow... I'm not overly familiar with PDO, but I believe that's an alternative way to do it. The execute method lets you do it in one method call. >> 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. > > Ok, so: > Our $sql will be: INSERT INTO $table (animal_name, animal_type) VALUES (:animal_name, > :animal_type) > > We then prepare this $sql by doing: > prepare($sql); and the value of this preparation will be kept on a variable name $stmt. > > Finally, on the foreach, we will grab each value of the $values array, and keep him, on a > variable called $vals, > > The $vals will contain this on the first occurrence of the loop: > array('animal_name'=>'bruce', > 'animal_type'=>'ding') > > and then, the var $vals will have this on the second occurrence of the loop: > array('animal_name'=>'bruce', > 'animal_type'=>'kanguro') > > etc., > > At the end of each of these loops, we will process the execute (that will send the statement to > the database). > $stmt->execute(array('animal_name'=>'bruce', > 'animal_type'=>'kanguro'). > > So this execute will do A LOT, it will take away the 'array(' part, will see the keys > of these arrays (e.g. animal_name and animal_type) compare them with the placeholder names given on > the prepare statement and, replace the placeholder names with the values inside on each of this > array keys. > > > Is this correct? Indeed. -Stuart -- http://stut.net/

« previous php.general (#295325) next »