//后续
Cache的目的是可以脱离数据库,所以用什么语言查询生成缓存都没关系
PHP直接连接操作MySQL的效率是很好的。C并不是很适合做Web,虽然有过很多人用C做CGI。它的好处是可以跑多线,可以底层地处理数据,可以做算法,缺点是开发效率太低。
至于C语言连接MySQL,你会发现它和PHP如此相象,因为本来就是用的同样的mysql.h...
Just Like this:
<?php
//Includes...
#include<windows.h>
#include<MySQLmysql.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
//Databasename...
charg_szHost[]="localhost";
UINTg_unPort=MYSQL_PORT;
charg_szUserName[]="charlieface";
charg_szPassword[]="pudgy";
charg_szDatabase[]="Candy";
charg_szSQLStatement[]="SELECT*chocolates";
//Entrypoint...
intmain(intnArguments,char*pszArguments[])
{
//Variables...
MYSQL*myDatabase=NULL;
MYSQL_RES*myResult=NULL;
MYSQL_FIELD*myField=NULL;
MYSQL_ROWmyRow=NULL;
UINTunRecords=0;
UINTunFields=0;
UINTunIndex=0;
UINTunFieldIndex=0;
//InitializeMySQL...
myDatabase=mysql_init(NULL);
//Failed...
if(!myDatabase)
{
//Alertuser...
printf("]Error:UnabletoinitializeMySQLAPI...n");
//Cleanup,abort,terminate...
mysql_close(myDatabase);
getch();
return0;
}
//Connecttoserverandcheckforerror...
if(mysql_real_connect(myDatabase,g_szHost,g_szUserName,g_szPassword,
NULL,g_unPort,NULL,0)!=0)
{
//Alertuser...
printf("]Error:Unabletoconnecttoserver...n");
//Cleanup,abort,terminate...
mysql_close(myDatabase);
getch();
return0;
}
//Selectdatabaseinserverandcheckforerror...
if(mysql_select_db(myDatabase,g_szDatabase)<0)
{
//Alertuser...
printf("]Error:Unabletoselectdatabase...n");
//Cleanup,abort,terminate...
mysql_close(myDatabase);
getch();
return0;
}
//Querydatabaseandcheckforerror...
if(mysql_query(myDatabase,g_szSQLStatement)!=0)
{
//Alertuser...
printf("]Error:Unabletoexecutequery...n");
//Cleanup,abort,terminate...
mysql_close(myDatabase);
getch();
return0;
}
//Retrievequeryresultfromserver...
myResult=mysql_store_result(myDatabase);
//Failed...
if(!myResult)
{
//Alertuser...
printf("]Error:Unabletoretrieveresult...n");
//Cleanup,abort,terminate...
mysql_close(myDatabase);
getch();
return0;
}
//Howmanyrecordswerereturnedintheresultset?
//Calculate...
unRecords=mysql_num_rows(myResult);
//Alertuser...
printf("]Query:%drecordsfound...n",unRecords);
//Howmanyfieldsarepresentinarecord?
//Calculate...
unFields=mysql_num_fields(myResult);
//Alertuser...
printf("]Query:Thereare%dfieldsineachrecord...",unFields);
//Outputrecords...
for(unIndex=0;unIndex<unRecords;unIndex++)
{
//Fetchrowfromresults...
myRow=mysql_fetch_row(myResult);
//Fetchfieldsfromrow...
myField=mysql_fetch_fields(myResult);
//Showrecord...
printf("]Record:%d/%dn",unIndex,unRecords);
//Outputallfieldsinthisrow...
for(unFieldIndex=0;unFieldIndex<unFields;unFieldIndex++)
{
//Output...
printf("t%s",myField[unFieldIndex].name);
}
}
//Freeresult...
mysql_free_result(myResult);
//Closeserverconnection...
mysql_close(myDatabase);
myDatabase=NULL;
//Alertuser,exit...
printf("]Done,pressanykeytoexit...n");
getch();
return0;
}
?>
//Includes...
#include<windows.h>
#include<MySQLmysql.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
//Databasename...
charg_szHost[]="localhost";
UINTg_unPort=MYSQL_PORT;
charg_szUserName[]="charlieface";
charg_szPassword[]="pudgy";
charg_szDatabase[]="Candy";
charg_szSQLStatement[]="SELECT*chocolates";
//Entrypoint...
intmain(intnArguments,char*pszArguments[])
{
//Variables...
MYSQL*myDatabase=NULL;
MYSQL_RES*myResult=NULL;
MYSQL_FIELD*myField=NULL;
MYSQL_ROWmyRow=NULL;
UINTunRecords=0;
UINTunFields=0;
UINTunIndex=0;
UINTunFieldIndex=0;
//InitializeMySQL...
myDatabase=mysql_init(NULL);
//Failed...
if(!myDatabase)
{
//Alertuser...
printf("]Error:UnabletoinitializeMySQLAPI...n");
//Cleanup,abort,terminate...
mysql_close(myDatabase);
getch();
return0;
}
//Connecttoserverandcheckforerror...
if(mysql_real_connect(myDatabase,g_szHost,g_szUserName,g_szPassword,
NULL,g_unPort,NULL,0)!=0)
{
//Alertuser...
printf("]Error:Unabletoconnecttoserver...n");
//Cleanup,abort,terminate...
mysql_close(myDatabase);
getch();
return0;
}
//Selectdatabaseinserverandcheckforerror...
if(mysql_select_db(myDatabase,g_szDatabase)<0)
{
//Alertuser...
printf("]Error:Unabletoselectdatabase...n");
//Cleanup,abort,terminate...
mysql_close(myDatabase);
getch();
return0;
}
//Querydatabaseandcheckforerror...
if(mysql_query(myDatabase,g_szSQLStatement)!=0)
{
//Alertuser...
printf("]Error:Unabletoexecutequery...n");
//Cleanup,abort,terminate...
mysql_close(myDatabase);
getch();
return0;
}
//Retrievequeryresultfromserver...
myResult=mysql_store_result(myDatabase);
//Failed...
if(!myResult)
{
//Alertuser...
printf("]Error:Unabletoretrieveresult...n");
//Cleanup,abort,terminate...
mysql_close(myDatabase);
getch();
return0;
}
//Howmanyrecordswerereturnedintheresultset?
//Calculate...
unRecords=mysql_num_rows(myResult);
//Alertuser...
printf("]Query:%drecordsfound...n",unRecords);
//Howmanyfieldsarepresentinarecord?
//Calculate...
unFields=mysql_num_fields(myResult);
//Alertuser...
printf("]Query:Thereare%dfieldsineachrecord...",unFields);
//Outputrecords...
for(unIndex=0;unIndex<unRecords;unIndex++)
{
//Fetchrowfromresults...
myRow=mysql_fetch_row(myResult);
//Fetchfieldsfromrow...
myField=mysql_fetch_fields(myResult);
//Showrecord...
printf("]Record:%d/%dn",unIndex,unRecords);
//Outputallfieldsinthisrow...
for(unFieldIndex=0;unFieldIndex<unFields;unFieldIndex++)
{
//Output...
printf("t%s",myField[unFieldIndex].name);
}
}
//Freeresult...
mysql_free_result(myResult);
//Closeserverconnection...
mysql_close(myDatabase);
myDatabase=NULL;
//Alertuser,exit...
printf("]Done,pressanykeytoexit...n");
getch();
return0;
}
?>
这是Dev-Cpp的Example,看过之后,发现这几个函数~呵呵
如果你再看看PHP里mysql扩展的源码,更会发现,它到C原始lib的转换是如此直接。
