I am writing an Apache module that has to perform some queries against a
MySQL database. For the most part, it is working properly. However, when I
get an empty result set for my query (that is, the select returns no rows) I
get a segmentation fault when trying to call mysql_num_rows.
Here is the relevant part of my code:
if (mysql_query(mysql_handle, query) != 0) {
.bail out.
}
result=mysql_store_result(mysql_handle);
if (result) {
if (mysql_num_rows(result) == 1){
.process the row.
}
}
The segfault occurs during the call to mysql_num_rows.
I have also tried using mysql_affected_rows(mysql_handle) instead; this call
also segfaults.
Finally, I have tried mysql_use_result like this:
result = mysql_use_result(mysql_handle);
if (result) {
if (data = mysql_fetch_row(result)){
.process data.
}
}
And, you guessed it, the call to mysql_fetch_row segfaults.
If I isolate the MySQL code in a small test program (not an Apache module)
it works great. I'm guessing it has something to do with either Apache or
PHP, which I also have included as a DSO in Apache. I noticed the warning
about using the bundled MySQL support with PHP, so I re-compiled PHP using
the same libmysqlclient as my module - no change.
It seems as if mysql_[store/use]_result is returning a bad pointer when
there is an empty result set, but only inside an Apache module. If the
query returns rows, everything works fine - I can verify this by
inserting/deleting rows from the database and watching httpd either live or
die. I'm using 3.23.32-log on Linux. Any thoughts?
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php