搜索
查看: 12229|回复: 6

MYSQL高手来看看SQL读取中文的问题

[复制链接]
发表于 2009-4-26 17:31:45 | 显示全部楼层 |阅读模式 来自 新疆乌鲁木齐
MYSQL的高手帮我看看那错了我读取SQL失败。我是新手照猫画虎的改的插件。
  1. /* 本插件由 AMXX-Studio 中文版自动生成*/
  2. /* UTF-8 func by www.DT-Club.net */
  3. new const PLUGINNAME[] = "中文ID"
  4. new const VERSION[]    = "2.1"
  5. new const AUTHORS[]    = "poohoo @ 老友记"


  6. #include <amxmodx>
  7. #include <amxmisc>
  8. #include <fakemeta>
  9. #include <dbi>


  10. new g_RetryOnce[33]
  11. new g_SetName[33][32]
  12. new g_SetAllow[33]

  13. new g_host[33]
  14. new g_user[33]
  15. new g_pass[33]
  16. new g_dbname[33]
  17. new g_tabname[33]
  18. new Sql:g_dbc
  19. new Result:result

  20. public plugin_init()
  21. {
  22.         register_plugin(PLUGINNAME, VERSION, AUTHORS)
  23.        
  24.         register_cvar("amx_sql_host", "127.0.0.1")
  25.         register_cvar("amx_sql_user", "root")
  26.         register_cvar("amx_sql_pass", "123456")
  27.         register_cvar("amx_sql_db", "discuz")
  28.         register_cvar("amx_sql_table", "cdb_memberfields")
  29.        
  30.         new configsDir[64]
  31.         get_configsdir(configsDir, 63)
  32.         server_cmd("exec %s/sql.cfg", configsDir)
  33.         server_exec()
  34.        
  35.         return PLUGIN_CONTINUE
  36. }

  37. public plugin_cfg()
  38. {
  39.         get_cvar_string("amx_sql_host",g_host,32)
  40.         get_cvar_string("amx_sql_user",g_user,32)
  41.         get_cvar_string("amx_sql_pass",g_pass,32)
  42.         get_cvar_string("amx_sql_db",g_dbname,32)       
  43.         get_cvar_string("amx_sql_table",g_tabname,32)
  44.        
  45.         return PLUGIN_CONTINUE
  46. }

  47. // 名字更改消息
  48. public client_infochanged(id)
  49. {
  50.         if (!is_user_connected(id))
  51.                 return PLUGIN_CONTINUE
  52.        
  53.         // 更换限制标记
  54.         if (!g_SetAllow[id])
  55.         {
  56.                 new oldname[32], newname[32]
  57.                 get_user_name(id, oldname, 31)
  58.                 get_user_info(id, "name", newname, 31)
  59.                
  60.                 if (strcmp(newname, oldname)==0)
  61.                         return PLUGIN_CONTINUE
  62.                
  63.                 // 兼容 sXe 改名
  64.                 if (equal(newname, "[NO-sXe-I]", 10))
  65.                 {
  66.                         replace(oldname, 31, "[NO-sXe-I] ", "")
  67.                         formatex(newname, 31, "[NO-sXe-I] %s", oldname)
  68.                         ig_setname(id, newname)
  69.                 }
  70.                 else
  71.                         ig_setname(id, oldname)
  72.                
  73.                 return PLUGIN_CONTINUE
  74.         }
  75.        
  76.         g_SetAllow[id] = 0
  77.         ig_setname(id, g_SetName[id])
  78.        
  79.         return PLUGIN_CONTINUE
  80. }

  81. // 重名检查
  82. one_name(id, name[], len)
  83. {
  84. new sample[32], s
  85. copy(sample, 31, name)

  86. for (new i=0; i<33; i++)
  87.        
  88.         {if(s>0)formatex(sample, 31, "(%d)%s", s, name)
  89.                
  90.                 if (!is_name_inuse(id, sample))
  91.                        
  92.                 break
  93.                
  94.                 s++
  95.         }
  96.         copy(name, len, sample)
  97. }

  98. is_name_inuse(id, const sample[])

  99. {
  100. new name[32]
  101. for (new i=1; i<=get_maxplayers(); i++)
  102. {
  103.         if (!is_user_connected(i)) continue
  104.         if (id==i) continue
  105.        
  106.         get_user_name(i, name, 31)
  107.         if (strcmp(name, sample)==0)
  108.                 return 1
  109.         }
  110.        
  111.         return 0
  112. }

  113. // 设置 id 需要的名字
  114. public set_name(id, const newname[])
  115. {
  116.         if (strlen(newname)<1)
  117.                 return
  118.        
  119.         g_SetAllow[id] = 1
  120.         copy(g_SetName[id], 31, newname)
  121.         one_name(id, g_SetName[id], 31)
  122.         set_user_info(id, "name", g_SetName[id])
  123. }

  124. public client_connect(id)
  125. {
  126.         remove_task(id)
  127.         g_SetAllow[id] = 0
  128.        
  129.         // 强制重新连接一次,以解决因为换中文ID后,换图会出现权限认证问题
  130.         if (!g_RetryOnce[id])
  131.         {
  132.                 g_RetryOnce[id] = 1
  133.                 client_cmd(id, "retry")
  134.         }
  135. }

  136. public client_putinserver(id)
  137. {
  138.         // 延时足够的时间,等待 admin 权限认证插件完成权限设置后,再执行更换名字
  139.         set_task(random_float(3.0,10.0), "get_name_from_file", id)
  140. }

  141. // 从文件里检查是否有对应的中文ID
  142. public get_name_from_file(id)
  143. {
  144.         if (!is_user_connected(id))
  145.                 return
  146.         new name[32]
  147.         get_user_name(id, name, 31)
  148.         new set = 0
  149.         g_dbc = dbi_connect(g_host,g_user,g_pass,g_dbname)
  150.         if (g_dbc == SQL_FAILED)
  151.                 log_amx("SQL Connection Failed")
  152.         else
  153.         {
  154.                 result = dbi_query(g_dbc,"set name utf8;")
  155.                 result = dbi_query(g_dbc,"select * from `%s` where auth = '%s'", g_tabname, name)
  156.                 if (result == RESULT_FAILED)
  157.                 {
  158.                         log_amx("Sorry,No DataBase or Table")
  159.                 }
  160.                 else if(result == RESULT_NONE)
  161.                 {
  162.                         new tmpName[64], tmpNameCN[64]
  163.                         dbi_result(result, "auth", tmpName, 31)
  164.                         dbi_result(result, "cnname",tmpNameCN,31)
  165.                         dbi_free_result(result)
  166.                         parse(tmpName,sizeof(tmpName)-1, tmpNameCN,sizeof(tmpNameCN)-1)
  167.                         trim(tmpName)
  168.                         trim(tmpNameCN)
  169.                        
  170.                         if (strcmp(name, tmpName)==0)
  171.                         {
  172.                                 copy(name, 31, tmpNameCN)
  173.                                 set = 1
  174.                         }
  175.                        
  176.                 }
  177.                 dbi_close(g_dbc)
  178.                
  179.                 // 完成后,设置新的名字
  180.                 if (set)
  181.                         set_name(id, name)
  182.         }
  183. }
复制代码
发表于 2009-4-26 17:57:52 | 显示全部楼层 来自 四川遂宁
SET NAMES 'UTF8'
回复

使用道具 举报

发表于 2009-4-26 18:55:31 | 显示全部楼层 来自 四川遂宁
本帖最后由 sakulekingz 于 2009-4-26 18:56 编辑

result = dbi_query(g_dbc,"set names 'utf8'")
回复

使用道具 举报

 楼主| 发表于 2009-4-27 18:02:44 | 显示全部楼层 来自 新疆乌鲁木齐
哦 谢谢 我用你的去试试
回复

使用道具 举报

发表于 2009-11-5 11:45:33 | 显示全部楼层 来自 河北沧州
很好用啊、。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
回复

使用道具 举报

发表于 2011-8-27 11:11:54 | 显示全部楼层 来自 四川德阳
加在那里呢?
回复

使用道具 举报

发表于 2011-8-28 11:48:10 | 显示全部楼层 来自 四川成都
加在那里呢?
shuyeshuye 发表于 2011-8-27 11:11

哈哈,阳光F管理员
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表