summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2004-05-20 16:13:13 +0000
committerIlia Alshanetsky <iliaa@php.net>2004-05-20 16:13:13 +0000
commit40b04cd54bb38253284f88dbdefc3fcb9acefbbd (patch)
treea65c8d19cdbccd49f691730ce5c67fb61ae4688f
parent0d6aa20880517e33949a4fb00a020951ecc4f91b (diff)
downloadphp-git-40b04cd54bb38253284f88dbdefc3fcb9acefbbd.tar.gz
Correctly report errors for statment problems.
-rwxr-xr-xext/pdo_mysql/mysql_driver.c4
-rwxr-xr-xext/pdo_mysql/mysql_statement.c8
-rwxr-xr-xext/pdo_mysql/php_pdo_mysql_int.h5
3 files changed, 9 insertions, 8 deletions
diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c
index d5035534da..27c447438d 100755
--- a/ext/pdo_mysql/mysql_driver.c
+++ b/ext/pdo_mysql/mysql_driver.c
@@ -30,10 +30,10 @@
#include "php_pdo_mysql.h"
#include "php_pdo_mysql_int.h"
-int _pdo_mysql_error(pdo_dbh_t *dbh, const char *file, int line TSRMLS_DC) /* {{{ */
+int _pdo_mysql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *file, int line TSRMLS_DC) /* {{{ */
{
pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
- enum pdo_error_type *pdo_err = &dbh->error_code;
+ enum pdo_error_type *pdo_err = stmt ? &stmt->error_code : &dbh->error_code;
pdo_mysql_error_info *einfo = &H->einfo;
einfo->errcode = mysql_errno(H->server);
diff --git a/ext/pdo_mysql/mysql_statement.c b/ext/pdo_mysql/mysql_statement.c
index 822273961e..b8e19854e9 100755
--- a/ext/pdo_mysql/mysql_statement.c
+++ b/ext/pdo_mysql/mysql_statement.c
@@ -63,11 +63,11 @@ static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
}
}
if (mysql_real_query(H->server, stmt->active_query_string, stmt->active_query_stringlen) != 0) {
- pdo_mysql_error(dbh);
+ pdo_mysql_error_stmt(stmt);
return 0;
}
if ((S->result = mysql_use_result(H->server)) == NULL) {
- pdo_mysql_error(dbh);
+ pdo_mysql_error_stmt(stmt);
return 0;
}
if (!stmt->executed) {
@@ -91,7 +91,7 @@ static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt TSRMLS_DC)
}
if((S->current_data = mysql_fetch_row(S->result)) == NULL) {
/* there seems to be no way of distinguishing 'no data' from 'error' */
- pdo_mysql_error(stmt->dbh);
+ pdo_mysql_error_stmt(stmt);
return 0;
}
S->current_lengths = mysql_fetch_lengths(S->result);
@@ -138,7 +138,7 @@ static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsig
}
if(colno >= mysql_num_fields(S->result)) {
/* error invalid column */
- pdo_mysql_error(stmt->dbh);
+ pdo_mysql_error_stmt(stmt);
return 0;
}
*ptr = S->current_data[colno];
diff --git a/ext/pdo_mysql/php_pdo_mysql_int.h b/ext/pdo_mysql/php_pdo_mysql_int.h
index 875738ccaf..8ff4f5a7c1 100755
--- a/ext/pdo_mysql/php_pdo_mysql_int.h
+++ b/ext/pdo_mysql/php_pdo_mysql_int.h
@@ -61,8 +61,9 @@ typedef struct {
extern pdo_driver_t pdo_mysql_driver;
-extern int _pdo_mysql_error(pdo_dbh_t *dbh, const char *file, int line TSRMLS_DC);
-#define pdo_mysql_error(s) _pdo_mysql_error(s, __FILE__, __LINE__ TSRMLS_DC)
+extern int _pdo_mysql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *file, int line TSRMLS_DC);
+#define pdo_mysql_error(s) _pdo_mysql_error(s, NULL, __FILE__, __LINE__ TSRMLS_DC)
+#define pdo_mysql_error_stmt(s) _pdo_mysql_error(stmt->dbh, stmt, __FILE__, __LINE__ TSRMLS_DC)
extern struct pdo_stmt_methods mysql_stmt_methods;
#endif