|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2004-07-20 20:15 UTC] divisor at ad69 dot com
Description:
------------
The problem is in CLI as well as in apache module
I have mysql 4.3.1 and php 5.0.0 installed, use mysqli interface to work with mysql.
In different scripts in different places (mostly random) I get the following error:
1) Warning message: Statement isn't valid anymore
2) Statetment result contains no data
Reproduce code:
---------------
appears in randomly different places, all like this:
($DB is mysqli object)
if ($stmt=$DB->prepare("select something from table where name=?")) {
$stmt->bind_param('s',$name);
$stmt->execute();
Expected result:
----------------
The same code worked fine on the second server running FreeBSD 5.2.1 without any problems. The main difference between 2 servers I think that the first one (where bug appears) is a productional server with many requests to apache/php/mysql, the second one is a development server with no usage.
Actual result:
--------------
get Warning: Statement isn't valid anymore message and statetment isn't executed
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Nov 09 04:00:01 2025 UTC |
it caused randomly on all statetments, prepare() was ok but execute() failed: if ($stmt=$DB->prepare("select something from table where name=?")) { $stmt->bind_param('s',$name); $stmt->execute(); // HERE PHP WRITE WARNING // AND STMT COINTAIN NO DATA variables stmt->error, stmt->errno are empty that's strange but after removing lines 182-187 from ext/mysqli/php_mysqli.h: if (!strcmp((char *)__name, "mysqli_stmt")) {\ if (!((MYSQL_STMT *)__ptr)->mysql) {\ php_error(E_WARNING, "Statement isn't valid anymore");\ RETURN_NULL();\ }\ }\ } it started working without any problems. but of course this 'hack' of php code isn't good ;)Hi, I have got the same problem. I am using PHP5 release with MySQL4.1.3-beta. The code is simple: $mysqli = new mysqli(); // connected successfully $stmt = $mysqli->prepare("SOME VALID QUERY"); $stmt->execute(); // No problem here $mysqli2 = $mysqli; $mysqli2->query("THE SAME QUERY"); // Still OK $stmt2 = $mysqli2->prepare("THE SAME QUERY"); $stmt2->execute(); The last line failed and returning "Warning: Statement isn't valid anymore in xxx".I'm experiencing the same issue as well with Apache 1.3.31 and 2.0.50 on XP SP2 and XP SP1 with PHP 5.0, 5.01 and 5.0-DEV from php5-win32-200408312230.zip. MySQL 4.1a, 4.1.2, 4.1.3 and now 4.1.4. It occurs in a page where I select a large amount of data from one table, process it, and insert it into multiple tables. There are 287 rows returned from the first select, and then 400-500 rows inserted. Line 644 begins with 'if( !$stmt->execute() ) {' Warning: Statement isn't valid anymore in ...\import\contact.class.inc.php on line 644 Error inserting email (#0): INSERT INTO email (EmailType, Email, ContactID) VALUES (?, ?, ?); $sql = "INSERT INTO {$kTABLE_PREFIX}email (EmailType, Email, ContactID) VALUES (?, ?, ?)"; if( !$stmt = $db->prepare($sql) ) { // prepare it printf("Error with %s:<br>%s<br>",$sql, $db->error ); } if( !$stmt->bind_param("ssi", $addr->EmailType, $addr->Email, $ContactID ) ) { printf("Error (#%d): %s;<br>%s<br>%s : %s : %s<br>", $stmt->errno, $sql, $stmt->error, $addr->EmailType, $addr->Email, $ContactID ); } if( !$stmt->execute() ) { printf("Error inserting email (#%d): %s;<br>%s<br>%s : %s : %i<br>", $stmt->errno, $sql, $stmt->error, $addr->EmailType, $addr->Email, $ContactID ); $this->dump(); printf("\$stmt = <pre>%s</pre><br>", var_export($stmt, TRUE) ); } This has been an issue since RC1, and is a bit frustrating. In my case reloading the page to re-import works, eventually, but since the entire process takes about 5 minutes it is painful.