RE: [PHP] Re: Vars inside an sql query [Regular expression question]
| From: | Monu Ogbe | Date: | Thu, 12 Jun 2003 13:12:13 +0000 |
| Subject: | RE: [PHP] Re: Vars inside an sql query [Regular expression question] | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-151243@lists.php.net to get a copy of this message | ||
Hi,
I'll join the conversation, because I have a similar problem.
PHP "interpolates" variable values in strings if these are enclosed in
double quotes:
e.g.,
$string = "select * FROM
table where id='$value' order by name";
PHP does not interpolate variables contained in strings delimited by
single quotes. That much is clear.
What seems to happen in Ben's case is that strings retrieved from the
database are treated as if they are delimited by single quotes.
I have the same trouble in the case of strings retrieved from a file.
I have not been able to find a function that FORCES the variables
within a single-quoted string to be translated.
I am currently looking into "heredocs" because the heredoc construct,
like double-quoted strings, does perform interpolation.
I'll report back if this works, but would love to hear if there is a
simpler solution.
Thanks,
Monu
>Sorry this is more correct :
>
>------ starting query.php
>select * FROM table where id='$value' order by name
>------ ending query.php
>
>"Hatem Ben" <reflex_news@yahoo.fr> a écrit dans le message de news:
>20030612120432.85609.qmail@pb1.pair.com...
>> Oh, ok this is how i want to do it exactly :
>> ------------ query.php
>> <?php
>> $query = "select * FROM table where
>> id='$value' order by name";
>> ?>
>>
>> ------------ parse.php
>> <?php
>> $fcontents = join('' , file('query.php'));
>> preg_match_all("/^('\$(.*)')/si", $fcontents,$matches);
>> print_r($matches)
>> ?>
>>
>> Thanks
>>
>> "Chris Hayes" <chayes@antenna.nl> a écrit dans le message de news:
>> 5.2.0.9.0.20030612134632.027a6da0@pop4.antenna.nl...
>> > At 13:54 12-6-03, you wrote:
>> > >>I got a headache doing this, i need to get vars inside an sql
query.
>For
>> > >>example :
>> > >>
>> > >>$query = "select * FROM table where
>> > >>id='$value' order by name";
>> > >>preg_match_all("/^('\$(.*)')/si", $query,$matches);
>> >
>> >
>> > >That doesn't work as the new string already is like "select * FROM
>> table
>> > >where id='2' order by name" assuming $value was 2...
>> >
>> > True, so try using
>> >
>> > $query = "select * FROM table where
>> > id='__VALUE__' order by
name";
>> >
>> > if you insist on doing it this way.
>> >
>> > If you decide to keep trying with the $value, you need to know that
>> > variables inside "double quotes" are entered on the spot, while not
so
>> with
>> > 'single quotes'.
>> >
>> >
>> > Also it is nice to know that the $ has a special position in
>> preg_matching,
>> > i kept this mail from a post from december in this list:
>> >
>> > > such as $, you must escape it twice. For example:
>> > >
>> > > $matchme = "\$example";
>> > > if (preg_match("/\$example/", $matchme)) {
>> > >
>> > > will not be matched because PHP interprets the \$ and passes it
as $.
>> > > Instead, you must do this:
>> > >
>> > > if (preg_match("/\\\$example/", $matchme)) {
>> >
>>
>>