ID:               47387
 User updated by:  lars dot a dot johansson at se dot atlascopco dot com
 Reported By:      lars dot a dot johansson at se dot atlascopco dot com
 Status:           Open
 Bug Type:         MySQLi related
 Operating System: Linux mandriva 2009
 PHP Version:      5.3CVS-2009-02-14 (snap)
 New Comment:

Hi,
I can reproduce 'the bug' with attached ugly code. you can use the
infile I supplied earlier. the problem seems a bit tricky.
1 $result = $mysqli->query('CREATE TABLE IF NOT EXISTS ...'
2 $result = $mysqli->query("SHOW WARNINGS", MYSQLI_USE_RESULT...
     this shows one warning:
     Note (1050): Table 'PROJECT_DETAIL' already exists
3 $result->close();
4 Now when I run $result = $mysqli->query(LOAD DATA LOCAL INFILE ...
     then $result is false and I get the warning: 
     //PHP Warning:  mysqli::query(): (00000/0): ...
     Note! this only happen in 5.3, in 5.2 $result is true.

Look in the code for the snippet that prevent the 'bug'.

Please let me know if there anything more I can do.

 
  



#!/home/tooljn/PHP5.3/local/bin/php
<?php
// #!/usr/local/bin/php
// #!/home/tooljn/PHP5.3/local/bin/php

$ok = sql2();

function sql2 () {
mysqli_report(MYSQLI_REPORT_ERROR);
$sqlhost='192.168.1.9';
$sqluser='test1tt';
$sqlpw='xxx';
$sqldb='test';
$port='3306';
$mysqli = new mysqli("$sqlhost", "$sqluser", "$sqlpw",
"$sqldb",$port);
$sqlstmt = 'use test;';
$result = $mysqli->query($sqlstmt);
var_dump($result);
//if($result) $result->close();
if ($result = $mysqli->query("SELECT DATABASE()")) {
        $row = $result->fetch_row();
        $result->close();
}
var_dump($row);
$sqlstmt = 'CREATE TABLE IF NOT EXISTS PROJECT_DETAIL
(`PROJECT_DEFINITION` CHAR(24),`DESCRIPTION` CHAR(40),`MASK_ID`
CHAR(24),`RESPONSIBLE_NO` DECIMAL(8,0),`APPLICANT_NO`
DECIMAL(8,0),`COMP_CODE` CHAR(4),`BUS_AREA` CHAR(4),`CONTROLLING_AREA`
CHAR(4),`PROFIT_CTR` CHAR(10),`PROJECT_CURRENCY`
CHAR(5),`PROJECT_CURRENCY_ISO` CHAR(3),`NETWORK_ASSIGNMENT`
DECIMAL(1,0),`START` DATE,`FINISH` DATE,`PLANT` CHAR(4),`CALENDAR`
CHAR(2),`PLAN_BASIC` DECIMAL(1,0),`PLAN_FCST` DECIMAL(1,0),`TIME_UNIT`
CHAR(3),`TIME_UNIT_ISO` CHAR(3),`NETWORK_PROFILE`
CHAR(7),`PROJECT_PROFILE` CHAR(7),`BUDGET_PROFILE`
CHAR(6),`PROJECT_STOCK` CHAR(1),`OBJECTCLASS` CHAR(2),`STATISTICAL`
CHAR(1),`TAXJURCODE` CHAR(15),`INT_PROFILE` CHAR(7),`WBS_SCHED_PROFILE`
CHAR(12),`CSH_BDGT_PROFILE` CHAR(6),`PLAN_PROFILE`
CHAR(6),`JOINT_VENTURE` CHAR(6),`RECOVERY_IND` CHAR(2),`EQUITY_TYPE`
CHAR(3),`JV_OBJECT_TYPE` CHAR(4),`JV_JIB_CLASS`
CHAR(3),`JV_JIB_SUB_CLASS_A` CHAR(5),`DELETION_FLAG`
CHAR(1),`OBJECTCLASS_EXT` CHAR(5),`FUNC_AREA` CHAR(4),`FUNC_AREA_LONG`
CHAR(16)

 ,PRIMARY KEY (`PROJECT_DEFINITION`));';

$result = $mysqli->query($sqlstmt);
var_dump($result);
if($result) {
        if ($mysqli->field_count) $result->close();
}
if ($mysqli->warning_count) {
        if ($result = $mysqli->query("SHOW WARNINGS", MYSQLI_USE_RESULT)) {
                while ($row = $result->fetch_row()) {
                        printf("%s (%d): %s\n", $row[0], $row[1], $row[2]);
                }
        }
        $result->close();
}

/*
// prevent bug from happen
$result = $mysqli->query('delete from PROJECT_DETAIL where 1=2');
if($result) {
        if ($mysqli->field_count) $result->close();
}
if ($mysqli->warning_count) {
        if ($result = $mysqli->query("SHOW WARNINGS", MYSQLI_USE_RESULT)) {
                while ($row = $result->fetch_row()) {
                        printf("%s (%d): %s\n", $row[0], $row[1], $row[2]);
                }
        }
        $result->close();
}
// end of bug prevention
*/

$sqlstmt = "LOAD DATA LOCAL INFILE 'PROJECT_DEFINITION_STRU.CSV'
replace INTO TABLE PROJECT_DETAIL FIELDS TERMINATED BY ';' IGNORE 0
LINES(`PROJECT_DEFINITION`,`DESCRIPTION`,`MASK_ID`,`RESPONSIBLE_NO`,`APPLICANT_NO`,`COMP_CODE`,`BUS_AREA`,`CONTROLLING_AREA`,`PROFIT_CTR`,`PROJECT_CURRENCY`,`PROJECT_CURRENCY_ISO`,`NETWORK_ASSIGNMENT`,`START`,`FINISH`,`PLANT`,`CALENDAR`,`PLAN_BASIC`,`PLAN_FCST`,`TIME_UNIT`,`TIME_UNIT_ISO`,`NETWORK_PROFILE`,`PROJECT_PROFILE`,`BUDGET_PROFILE`,`PROJECT_STOCK`,`OBJECTCLASS`,`STATISTICAL`,`TAXJURCODE`,`INT_PROFILE`,`WBS_SCHED_PROFILE`,`CSH_BDGT_PROFILE`,`PLAN_PROFILE`,`JOINT_VENTURE`,`RECOVERY_IND`,`EQUITY_TYPE`,`JV_OBJECT_TYPE`,`JV_JIB_CLASS`,`JV_JIB_SUB_CLASS_A`,`DELETION_FLAG`,`OBJECTCLASS_EXT`,`FUNC_AREA`,`FUNC_AREA_LONG`);";
$result = $mysqli->query($sqlstmt);
// When running 5.3 $result is false and I got the following err msg if
the table PROJECT_DETAIL already exists in create above
//PHP Warning:  mysqli::query(): (00000/0):  in
/home/tooljn/dw/data/090217173424_chopsap01/projectDetails0/err53.php on
line 61
//
var_dump($result);
if($result) {
        if ($mysqli->field_count) $result->close();
}
if ($mysqli->warning_count) {
        if ($result = $mysqli->query("SHOW WARNINGS", MYSQLI_USE_RESULT)) {
                while ($row = $result->fetch_row()) {
                        printf("%s (%d): %s\n", $row[0], $row[1], $row[2]);
                }
        }
        $result->close();
}
}


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

[2009-02-24 08:35:59] lars dot a dot johansson at se dot atlascopco dot
com

Hi, how do I use/set 'feedback'?
I have made my script a bit simpler. I can reproduce this without
forking. What seems to trigger this odd behavior is the first CREATE
TABLE. If I run a TRUNCATE table PROJECT_DETAIL, or a DELETE from
PROJECT_DETAIL where 1=2 in between the subsequent LOAD results as it
should. So I can circumvent the problem by inserting a dummy delete.
(I tried to insert a SELECT * from PROJECT_DETAIL where 1=2 in between,
but that didn't work)

I do one more attempt this weekend to expose the problem.

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

[2009-02-18 17:28:35] lars dot a dot johansson at se dot atlascopco dot
com

Hi,
I compiled with --enable-debug, but, I use SAPRFC in this scenario,  it
does not compile with debug. And it seems PHP debug does not play with
dynamic modules compiled without debug. I see if I can force this bug?
some other way.

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

[2009-02-17 19:06:36] johan...@php.net

Would be great if you can narrow it down a bit more, Setting to
"Feedback" for tracking this better. Thank you.

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

[2009-02-17 18:50:05] lars dot a dot johansson at se dot atlascopco dot
com

hi again,
the logon was a red herring. I used the wrong userid.
I cannot reproduce the error with my abrevaited test program.
It works as it should.
Still my original program do not work the same in 5.3 as it did in 5.2.
I do not think I have time work on this util the weekend.

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

[2009-02-17 17:42:02] lars dot a dot johansson at se dot atlascopco dot
com

Hi again,
I created a smaller program 
#!/home/tooljn/PHP5.3/local/bin/php
<?php
// #!/home/tooljn/PHP/php-5.2.6/sapi/cli/php
// #!/usr/local/bin/php
// #!/home/tooljn/PHP5.3/local/bin/php
// #!/home/tooljn/PHP/php5.3-200802231330/sapi/cli/php
mysqli_report(MYSQLI_REPORT_ERROR);
$sqlhost='192.168.1.9';
$sqluser='uuuuu';
$sqlpw='pppppp';
$sqldb='test';
$port='3306';
$mysqli = new mysqli("$sqlhost", "$sqluser", "$sqlpw",
"$sqldb",$port);
$result = $mysqli->query('use test;');
var_dump($result);
$result = $mysqli->query('CREATE TABLE IF NOT EXISTS PROJECT_DETAIL
(`PROJECT_DEFINITION` CHAR(24),`DESCRIPTION` CHAR(40),`MASK_ID`
CHAR(24),`RESPONSIBLE_NO` DECIMAL(8,0),`APPLICANT_NO`
DECIMAL(8,0),`COMP_CODE` CHAR(4),`BUS_AREA` CHAR(4),`CONTROLLING_AREA`
CHAR(4),`PROFIT_CTR` CHAR(10),`PROJECT_CURRENCY`
CHAR(5),`PROJECT_CURRENCY_ISO` CHAR(3),`NETWORK_ASSIGNMENT`
DECIMAL(1,0),`START` DATE,`FINISH` DATE,`PLANT` CHAR(4),`CALENDAR`
CHAR(2),`PLAN_BASIC` DECIMAL(1,0),`PLAN_FCST` DECIMAL(1,0),`TIME_UNIT`
CHAR(3),`TIME_UNIT_ISO` CHAR(3),`NETWORK_PROFILE`
CHAR(7),`PROJECT_PROFILE` CHAR(7),`BUDGET_PROFILE`
CHAR(6),`PROJECT_STOCK` CHAR(1),`OBJECTCLASS` CHAR(2),`STATISTICAL`
CHAR(1),`TAXJURCODE` CHAR(15),`INT_PROFILE` CHAR(7),`WBS_SCHED_PROFILE`
CHAR(12),`CSH_BDGT_PROFILE` CHAR(6),`PLAN_PROFILE`
CHAR(6),`JOINT_VENTURE` CHAR(6),`RECOVERY_IND` CHAR(2),`EQUITY_TYPE`
CHAR(3),`JV_OBJECT_TYPE` CHAR(4),`JV_JIB_CLASS`
CHAR(3),`JV_JIB_SUB_CLASS_A` CHAR(5),`DELETION_FLAG`
CHAR(1),`OBJECTCLASS_EXT` CHAR(5),`FUNC_AREA` CHAR(4),`FUNC_AREA_LONG`
CHAR(16)

 ,PRIMARY KEY (`PROJECT_DEFINITION`));');
var_dump($result);
$result = $mysqli->query("LOAD DATA LOCAL INFILE
'PROJECT_DEFINITION_STRU.CSV' replace INTO TABLE PROJECT_DETAIL FIELDS
TERMINATED BY ';' IGNORE 0
LINES(`PROJECT_DEFINITION`,`DESCRIPTION`,`MASK_ID`,`RESPONSIBLE_NO`,`APPLICANT_NO`,`COMP_CODE`,`BUS_AREA`,`CONTROLLING_AREA`,`PROFIT_CTR`,`PROJECT_CURRENCY`,`PROJECT_CURRENCY_ISO`,`NETWORK_ASSIGNMENT`,`START`,`FINISH`,`PLANT`,`CALENDAR`,`PLAN_BASIC`,`PLAN_FCST`,`TIME_UNIT`,`TIME_UNIT_ISO`,`NETWORK_PROFILE`,`PROJECT_PROFILE`,`BUDGET_PROFILE`,`PROJECT_STOCK`,`OBJECTCLASS`,`STATISTICAL`,`TAXJURCODE`,`INT_PROFILE`,`WBS_SCHED_PROFILE`,`CSH_BDGT_PROFILE`,`PLAN_PROFILE`,`JOINT_VENTURE`,`RECOVERY_IND`,`EQUITY_TYPE`,`JV_OBJECT_TYPE`,`JV_JIB_CLASS`,`JV_JIB_SUB_CLASS_A`,`DELETION_FLAG`,`OBJECTCLASS_EXT`,`FUNC_AREA`,`FUNC_AREA_LONG`);");
var_dump($result);

that gives me this output
too...@tooseww14 projectDetails0]$ ./err53.php
PHP Warning:  mysqli::mysqli(): OK packet 6 bytes shorter than expected
in /home/tooljn/dw/data/090217173424_chopsap01/projectDetails0/err53.php
on line 13
PHP Warning:  mysqli::mysqli(): (HY000/2000): mysqlnd cannot connect to
MySQL 4.1+ using old authentication in
/home/tooljn/dw/data/090217173424_chopsap01/projectDetails0/err53.php on
line 13
PHP Warning:  mysqli::query(): Couldn't fetch mysqli in
/home/tooljn/dw/data/090217173424_chopsap01/projectDetails0/err53.php on
line 14
NULL
PHP Warning:  mysqli::query(): Couldn't fetch mysqli in
/home/tooljn/dw/data/090217173424_chopsap01/projectDetails0/err53.php on
line 18
NULL
PHP Warning:  mysqli::query(): Couldn't fetch mysqli in
/home/tooljn/dw/data/090217173424_chopsap01/projectDetails0/err53.php on
line 20
NULL

I have to find out why I can logon in my original program and not here.
I hope I can fix this in the next comming hour.

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

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/47387

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

Reply via email to