ID:               15673
 Updated by:       [EMAIL PROTECTED]
-Summary:          Quotes crash MySQL queries: $array['val'] = Parse
                   Error, but  $array[val] works
 Reported By:      [EMAIL PROTECTED]
 Status:           Analyzed
 Bug Type:         Arrays related
 Operating System: Linux 2.4.5
 PHP Version:      4.1.1
 New Comment:

Yes, I know your code works, thats not the problem.

Now change your own code:

echo $foo[key];  ==to==> echo "Key value is $foo[key]"; // No
warnings!!!!!

And then TRY:
echo "$foo['key']"; // PARSE ERROR!!!

Does it happens with the cvs version?


Previous Comments:
------------------------------------------------------------------------

[2002-02-22 08:12:54] [EMAIL PROTECTED]

Work's right with CVS:

$ php 
<?
error_reporting(E_ALL);
$foo['key'] = 'value';
echo $foo[key];
?>
X-Powered-By: PHP/4.2.0-dev
Content-type: text/html

<br />
<b>Warning</b>:  Use of undefined constant key - assumed 'key' in
<b>-</b> on line <b>4</b><br />
-(4) : Warning - Use of undefined constant key - assumed 'key'

------------------------------------------------------------------------

[2002-02-22 07:52:32] [EMAIL PROTECTED]

I did this tests using error_reporting(E_ALL);

Thats my point, the correct array syntax according the doc:
http://www.php.net/manual/en/language.types.array.php
is to call $array['value'] even thought $array[value] will work, but in
the later case it should send a NOTICE warning.

well, try this in you system:

error_reporting(E_ALL);
$arr = array( 'foo'  =>  'bar', 'etc' => 'other');

//This will make a Parse Error in PHP 4.1.1:
//echo "Foo value is $arr['foo']";
//This works:
echo "Foo value is ".$arr['foo'];
echo "Foo value is {$arr['foo']}";

//This will work but WON'T send a warning as the doc says:
echo "Foo value is $arr[foo]";
// This will get a parse error
echo "Foo value is $arr['foo']";

------------------------------------------------------------------------

[2002-02-22 07:40:57] [EMAIL PROTECTED]

Yes, I get you get a NOTICE warning when you use $array[key] (because
key will be an undefined constant and therefore evaluate to a string).

Try with error_reporting(E_ALL); before using this syntax.

------------------------------------------------------------------------

[2002-02-22 07:25:35] [EMAIL PROTECTED]

Hey man WOW, Im impressed, you have already replied!!!

Yes, this solution works:

$query = "SELECT * from {$table['users']}";

But shouldn't "Blah $table['users']" work as well?

Shouldn't PHP at least send a warning when using "$table[users]" even
if the other "$arr['foo']" syntaxes where wrong?

Thanks!

------------------------------------------------------------------------

[2002-02-22 07:17:21] [EMAIL PROTECTED]

Use the {$array['key']} syntax as I told you.

However, I can't remember if "foo $array['bar']" ever worked or not
right now. Someone else?

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/15673

-- 
Edit this bug report at http://bugs.php.net/?id=15673&edit=1

Reply via email to