Re: Doubts concerning a general Insert method
| From: | Stuart | 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/