mirror of
https://github.com/php/php-src.git
synced 2024-12-11 10:54:47 +08:00
Correctly report errors for statment problems.
This commit is contained in:
parent
0d6aa20880
commit
40b04cd54b
@ -30,10 +30,10 @@
|
|||||||
#include "php_pdo_mysql.h"
|
#include "php_pdo_mysql.h"
|
||||||
#include "php_pdo_mysql_int.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;
|
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;
|
pdo_mysql_error_info *einfo = &H->einfo;
|
||||||
|
|
||||||
einfo->errcode = mysql_errno(H->server);
|
einfo->errcode = mysql_errno(H->server);
|
||||||
|
@ -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) {
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
if ((S->result = mysql_use_result(H->server)) == NULL) {
|
if ((S->result = mysql_use_result(H->server)) == NULL) {
|
||||||
pdo_mysql_error(dbh);
|
pdo_mysql_error_stmt(stmt);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!stmt->executed) {
|
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) {
|
if((S->current_data = mysql_fetch_row(S->result)) == NULL) {
|
||||||
/* there seems to be no way of distinguishing 'no data' from 'error' */
|
/* there seems to be no way of distinguishing 'no data' from 'error' */
|
||||||
pdo_mysql_error(stmt->dbh);
|
pdo_mysql_error_stmt(stmt);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
S->current_lengths = mysql_fetch_lengths(S->result);
|
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)) {
|
if(colno >= mysql_num_fields(S->result)) {
|
||||||
/* error invalid column */
|
/* error invalid column */
|
||||||
pdo_mysql_error(stmt->dbh);
|
pdo_mysql_error_stmt(stmt);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
*ptr = S->current_data[colno];
|
*ptr = S->current_data[colno];
|
||||||
|
@ -61,8 +61,9 @@ typedef struct {
|
|||||||
|
|
||||||
extern pdo_driver_t pdo_mysql_driver;
|
extern pdo_driver_t pdo_mysql_driver;
|
||||||
|
|
||||||
extern int _pdo_mysql_error(pdo_dbh_t *dbh, const char *file, int 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, __FILE__, __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;
|
extern struct pdo_stmt_methods mysql_stmt_methods;
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user