sulheru / php-sql-parser

Automatically exported from code.google.com/p/php-sql-parser
BSD 3-Clause "New" or "Revised" License
0 stars 0 forks source link

unknown expr_type in VALUES[2] expression #36

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
require("php-sql-parser.php");
require("php-sql-creator.php");

$sql = "INSERT INTO test (`name`, `test`) VALUES ('\'Superman\'', ''), 
('\'Superman\'', '')";

$parser = new PHPSQLParser($sql);
$ben = new PHPSQLCreator($parser->parsed);
print_r( $sql );

What is the expected output? What do you see instead?

Expected output
---------------
INSERT INTO test (`name`, `test`) VALUES ('\'Superman\'', ''), ('\'Superman\'', 
'')

Observed output
---------------
unknown expr_type in VALUES[2] expression

Also (This may be related)

Observed output
---------------
[VALUES] => Array
        (
            [0] => Array
                (
                    [expr_type] => const
                    [base_expr] => '\'Superman\''
                    [sub_tree] => 
                )

            [1] => Array
                (
                    [expr_type] => const
                    [base_expr] => ''
                    [sub_tree] => 
                )

            [2] => Array
                (
                    [expr_type] => expression
                    [base_expr] => ('\'Superman\'', '')
                    [sub_tree] => Array
                        (
                            [0] => Array
                                (
                                    [expr_type] => const
                                    [base_expr] => '\'Superman\''
                                    [sub_tree] => 
                                )

                            [1] => Array
                                (
                                    [expr_type] => colref
                                    [base_expr] => ,
                                    [sub_tree] => 
                                )

                            [2] => Array
                                (
                                    [expr_type] => const
                                    [base_expr] => ''
                                    [sub_tree] => 
                                )

                        )

                )

        )

Note the [1] array key in the expression sub tree. This presumably is incorrect.

What version of the product are you using? On what operating system?
https://www.phosco.info/publicsvn/php-sql-parser/trunk/ REV 136

Original issue reported on code.google.com by ben.swin...@gmail.com on 12 Mar 2012 at 10:07

GoogleCodeExporter commented 9 years ago
What column type is "test"? The parser doesn't await an expression at this 
point. Normally I use Oracle, so the statement is a little bit strange to me.

Original comment by pho...@gmx.de on 12 Mar 2012 at 12:52

GoogleCodeExporter commented 9 years ago
INSERT INTO test (`name`, `test`) VALUES ('\'Superman\'', ''), ('\'Superman\'', 
'')

INSERT INTO table ( `col_1`, `col_2` )
VALUES ( 'val_for_col1', 'val_for_col2' ),    -- This inserts a row
       ( 'val_for_col1', 'val_for_col2' )     -- This inserts another row

From http://dev.mysql.com/doc/refman/5.5/en/insert.html

INSERT statements that use VALUES syntax can insert multiple rows. To do this, 
include multiple lists of column values, each enclosed within parentheses and 
separated by commas. Example:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
The values list for each row must be enclosed within parentheses. The following 
statement is illegal because the number of values in the list does not match 
the number of column names:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3,4,5,6,7,8,9);
VALUE is a synonym for VALUES in this context. Neither implies anything about 
the number of values lists, and either may be used whether there is a single 
values list or multiple lists.

Original comment by ben.swin...@gmail.com on 12 Mar 2012 at 2:34

GoogleCodeExporter commented 9 years ago
Ah, ok. Thanks. Try the version on 
https://www.phosco.info/publicsvn/php-sql-parser/trunk REV 139. I have enhanced 
the output, so your code could have problems with it.

Original comment by pho...@gmx.de on 12 Mar 2012 at 2:42

GoogleCodeExporter commented 9 years ago
Thanks for your quick feedback and continued efforts with this project. Just 
tried REV 140 with no luck. Still can replicate the problem using the following.

<?php

require("php-sql-parser.php");
require("php-sql-creator.php");

error_reporting( E_ALL );
ini_set( 'display_errors', 1 );

$sql = "INSERT INTO test (`name`, `test`) VALUES ('\'Superman\'', ''), 
('\'sdfsd\'', '')";

$parser = new PHPSQLParser($sql);

echo "<pre>";
print_r( new PHPSQLCreator( $parser->parsed ) );

Original comment by ben.swin...@gmail.com on 12 Mar 2012 at 3:11

GoogleCodeExporter commented 9 years ago
Hm, I have added tests for the issue, which seems to be ok. Please check your 
browser cache settings or checkout the version with a Subversion client.

If I execute your test script with the current version, I will get:

PHPSQLCreator Object
(
    [created] => INSERT INTO test (`name`,`test`) VALUES ('\'Superman\'',''),('\'sdfsd\'','')
)

This is the same statement as provided in $sql (except some space characters).

Original comment by pho...@gmx.de on 12 Mar 2012 at 8:05

GoogleCodeExporter commented 9 years ago
Apologies, it was indeed my browser cache.

However, REV 141 now has

Fatal error: Multiple access type modifiers are not allowed in 
C:\xampp\htdocs\php-sql-parser.php on line 1620

private private function process_record($unparsed) {

At least that one's an easy fix :D

Original comment by ben.swin...@gmail.com on 13 Mar 2012 at 9:29

GoogleCodeExporter commented 9 years ago
Is the issue fixed with the current version (REV 186)?

Original comment by pho...@gmx.de on 13 Mar 2012 at 12:05

GoogleCodeExporter commented 9 years ago
It is indeed. REV 186 does not present the multiple access type modifiers error.

Original comment by ben.swin...@gmail.com on 13 Mar 2012 at 12:12

GoogleCodeExporter commented 9 years ago
:-)

Original comment by pho...@gmx.de on 13 Mar 2012 at 12:15