-1

関数内からある関数から次の関数に値を渡す必要があります。

例 (チャネル内のコマンドに応答するようにプログラムされた私の IRC ボット):

def check_perms(nick,chan,cmd):
  sql = "SELECT `"+ cmd +"` FROM permissions WHERE nick = '"+ nick +"' and chan = '"+ chan +"'" # This returns 0
  #sql = "SELECT `restart` FROM permissions WHERE nick = 'Me' and chan = '#mychan'" # this works as intended
  cursor.execute(sql)
  result = cursor.fetchall()
  for row in result:
     if (row[0] == 1): # Nick logged in and has permission
        return 1 
     else: # nick does not have permissions
        return 0

def com_restart(nick,chan):
  perm = check_perms(nick,chan,"restart")
  if (perm == 0): # nick did not have permission
     irc.send("NOTICE "+ nick +" :Permission denied.\n")
  elif (perm == 1): # nick has permission
     irc.send("PRIVMSG "+ chan +" :I've been asked to restart myself by "+ nick +".\n")

nick = "Me" # This is determined by a bunch of regex splits and such
chan = "#mychan" # This is determined by regex splits as well
com_restart(nick,chan)

しかし、これを試してみると、値が SQL クエリに渡されていないようで、0 が返されます。

ご協力いただきありがとうございます。

編集 - 現在の状態で作業しているコードを追加しました。

4

2 に答える 2

0

このコード行についてはよくわかりません:

sql = "SELECT `"+ cmd +"` FROM permissions WHERE nick = '"+ nick +"' and chan = '"+ chan +"'" # This returns 0

クエリ文字列が適切な形式であることを確認しようとしているようです。しかし、それは必要ありません。文字列クエリを連結すると、次のようにうまく機能します。

sql = "SELECT " + cmd + " FROM permissions WHERE nick = " + nick + " and chan = " + chan

クエリ ステートメントのどこにも一重引用符がないことに注意してください。

于 2012-01-12T04:59:52.197 に答える