ExtAjaxrequest({
url : url,
method : 'GET',
success : function(resp) {
var data = Extdecode(respresponseText);
}
});
据我以前编写类似在线考试的东东,像你描述中的可以当作是多项选择(或单项选择)题型,那么,数据库里可以设计有4个字段:
1问题ID
2问题标题
3选项ABCD(这个可以放在一个字段里,也可以分开成4个字段来放)
4问题答案
当用户选择提交答案后,直接比较与问题答案是否相符就可以了。
#ifdef WIN32
#include <windowsh>
#include <odbcinsth>
#include <sqlexth>
#else
#include <mysqlh>
#include <unistdh>
#define SQLHANDLE static MYSQL
#endif
#include <stdargh>
#include <stdlibh>
#include <stdioh>
#include <stringh>
SQLHANDLE hDBEnv, hDBC;
int DB_Open(char dbcn, char usr, char pwd)
{
int r;
#ifdef WIN32
r = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hDBEnv);
if(r) return 0;
r = SQLSetEnvAttr(hDBEnv,SQL_ATTR_ODBC_VERSION,
(void)SQL_OV_ODBC3,0);
if(r) return 0;
r = SQLAllocHandle(SQL_HANDLE_DBC, hDBEnv, &hDBC);
if(r) return 0;
r = SQLConnect(hDBC,
(unsigned char )dbcn, strlen(dbcn),
(unsigned char )usr, strlen(usr),
(unsigned char )pwd, strlen(pwd));
return r==SQL_SUCCESS || r==SQL_SUCCESS_WITH_INFO;
#else
mysql_init(&hDBC);
MYSQL rx = mysql_real_connect(
&hDBC, dbcn, usr, pwd, NULL, 0, NULL, 0);
if(!rx) return 0;
return 1;
#endif
}//end DB_Open
int DB_Exec(char sql)
{
#ifdef WIN32
SQLHANDLE hStatement = NULL;
SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStatement);
SQLExecDirect(hStatement,(unsigned char )sql, strlen(sql));
SQLCloseCursor(hStatement);
SQLFreeHandle(SQL_HANDLE_STMT, hStatement);
hStatement = NULL;
#else
mysql_real_query (&hDBC, sql, strlen(sql));
#endif
return 1;
}//end DB_Exec
int DB_Close(void)
{
#ifdef WIN32
SQLDisconnect(hDBC);
SQLFreeHandle(SQL_HANDLE_DBC, hDBC);
SQLFreeHandle(SQL_HANDLE_ENV, hDBEnv);
#else
mysql_close(&hDBC);
#endif
return 1;
}//DB_Close()
#ifndef WIN32
typedef struct tagMySQLRecordset {
MYSQL_RES hRecord;
void row;
int size;
int cols;
} MYSQLRecordset;
#endif
void DB_CleanQuery(void hRecordset)
{
if(!hRecordset) return;
#ifdef WIN32
__try {
SQLCloseCursor(hRecordset);
SQLFreeHandle(SQL_HANDLE_STMT, hRecordset);
hRecordset = NULL;
}__finally{
return;
}//end try
#else
MYSQLRecordset hRec = (MYSQLRecordset ) hRecordset;
mysql_free_result (hRec->hRecord);
free(hRec->row); hRec->row = NULL;
free(hRec->size); hRec->size = NULL;
free(hRec); hRec = NULL;
#endif
}//end DB_CleanQuery
int DB_Next(void hRecordset)
{
int r=0; if(!hRecordset) return 0;
#ifdef WIN32
r = SQLFetch(hRecordset);
r = r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO;
if(!r) {
DB_CleanQuery(hRecordset);
}//end if
#else
MYSQLRecordset hRec = (MYSQLRecordset ) hRecordset;
MYSQL_ROW row = mysql_fetch_row (hRec->hRecord);
if(row) {
for(int i=0; i<hRec->cols; i++) {
memcpy(hRec->row[i], row[i], hRec->size[i]);
}//next i
r = 1;
}else{
DB_CleanQuery(hRecordset);
r = 0;
}//end if
#endif
return r;
}//end DB_Next
int DB_params_count(const char fmt)
{
int i=0, j=0;
while(fmt[i]) {
if(fmt[i]=='%') j++;
i++;
}//end while
return j;
}//end DB_params_count
void DB_Query(char sql, const char fmt, )
{
int r=0;
int cols = DB_params_count(fmt);
if(cols<1) return NULL;
#ifdef WIN32
SQLHANDLE hStatement = NULL;
SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStatement);
r = SQLExecDirect(hStatement,(unsigned char )sql, strlen(sql));
r = r==SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO;
if(!r) {
return NULL;
}//end if
#else
r = mysql_real_query (&hDBC, sql, strlen(sql));
if(r) return NULL;
MYSQL_RES rec = NULL;
rec = mysql_store_result (&hDBC);
if(!rec) return NULL;
MYSQLRecordset hStatement
= (MYSQLRecordset )malloc(sizeof(MYSQLRecordset));
if(!hStatement) return NULL;
memset(hStatement, 0, sizeof(MYSQLRecordset));
hStatement->hRecord = rec;
hStatement->cols = cols;
hStatement->row = (void )malloc(cols sizeof(void ));
memset(hStatement->row, 0, cols sizeof(void ));
hStatement->size = (int )malloc(cols sizeof(int));
memset(hStatement->size, 0, cols sizeof(int));
#endif
va_list ap; va_start(ap, fmt);
void var; char buf[32];
int i=0,j=0,k=0,sz=0; char c=0;
int len = strlen(fmt); int bad=1;
#ifdef WIN32
int col=1;
#else
int col=0;
#endif
while(fmt[i]) {
c = fmt[i++];
if(c != '%') continue;
c = fmt[i++];
var = va_arg(ap, void );
if(c == 'd') {
#ifdef WIN32
SQLBindCol(hStatement, col, SQL_C_SLONG, var, 4,NULL);
#else
hStatement->row[col] = var;
hStatement->size[col] = sizeof(long);
#endif
col++;
continue;
}//end if
if(c == 'f') {
#ifdef WIN32
SQLBindCol(hStatement, col, SQL_C_FLOAT, var, 4,NULL);
#else
hStatement->row[col] = var;
hStatement->size[col] = sizeof(float);
#endif
col++;
continue;
}//end if
memset(buf, 0, 32); bad=1;
for(j=i-1; j<len; j++) {
c = fmt[j];
if(c>='0' && c<='9') buf[j-i+1]=c;
if(c=='s') {bad=0; k=j+1; break;}
}//next j
if(bad) return NULL;
sscanf(buf, "%d", &sz);
#ifdef WIN32
SQLBindCol(hStatement, col, SQL_C_CHAR, var, sz, NULL);
#else
hStatement->row[col] = var;
hStatement->size[col] = sz;
#endif
col++;
i = k;
}//end while
va_end(ap);
return hStatement;
}//end DB_Rec
你可以先用select from user取出全部的数据
然后取得rs的最大记录数(rsrecordcount),然后再随机取出1到最大记录数之间的随机5个数(这步应该很简单,不用解释如何做了吧呵呵),然后使用rsmove(你随机的5个数字之一)就可以分别取出5条记录来这个办法的好处是你的主键id不需要是连续的,而绝大多数表都不是连续的呵呵所以使用Sql语句的where id=随机数字的方法不是很安全
以上就是关于Extjs怎么取出数据库中的内容放到数组中全部的内容,包括:Extjs怎么取出数据库中的内容放到数组中、PHP从数据库取出数组后如何判断一列同数值的个数、如何将数据库的数据读取到数组中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)