2009-12-16 7 views
1

SQL 쿼리에 변수를 채워서 페이지에 값을 반환하려고합니다.SQL 쿼리에서 Drupal 변수 사용

$sql = 'SELECT account FROM users WHERE uid = arg(1)'; 

여기서 arg (1) = 현재보고있는 사용자입니다. 나는 페이지 상단에 arg (1)을 출력하고 있기 때문에 Drupal은 그것을 가지고 싶어하지 않는다. 나는 여러 가지 탈출을 시도했다. 다음은 전체 코드가

function accountselect_getclientaccount() { 
     global $user; 
     $sql = 'SELECT account FROM users WHERE uid = arg(1)'; 
     $result = db_result(db_query($sql)); 
    return $result; 
    } 

답변

1

당신이 시도 할 수 :

$uid = arg(1); 
$result = db_result(db_query("SELECT account FROM {users} WHERE uid = %d", $uid)); 
+0

당신은 남자 (또는 여자에게)입니다! :) – tpow

1

sql-injection를 방지하려면 (추가 정보를 원하시면 db_query 참조) 자리를 사용해야합니다

$result = db_query("SELECT * FROM {users} WHERE uid = %d", arg(1)); 

는 또한 db_result주의 단일 열, 단일 결과 쿼리를위한 것입니다. db_fetch_object를 사용하고 싶을 것입니다. 또한 사용자 테이블에 account라는 열이 없습니다.

+0

고마워요, jhedstrom - anonymouse에 의해 SQL 주입 공격 측면에서 동일한 솔루션이 제공되지 않습니다 ...? 그건 그렇고, 나는 단지 하나의 가치를 얻으려고 노력 중이며, 나는'account'라는 이름의 칼럼을 만들었습니다. 나는 그것이 드루팔 성경에 오줌처럼 쓰이는 것을 알고 있습니다. 그러나 그것을 사용하고 싶었던 특정 상황에 대해서는 그렇게 할 필요가있었습니다. 게다가, 나는 User 테이블이 그렇게 많이 바뀌지 않을 것이라고 내기하고있다 ... – tpow

+0

anonymouse의 것과 같다 ... 나는 우리가 그 답을 교차 게시 한 것 같다. – jhedstrom

1
function accountselect_getclientaccount() { 
    return (arg(0) == 'user') ? db_result(db_query('SELECT account FROM {users} WHERE uid = %d', arg(1))) : FALSE; 
    } 

왜 글로벌 $ 사용자를 사용하는지 알 수 없습니다. 아마 당신은 arg (1) 대신에 $ user-> uid를 사용해야 할 것입니다. 이렇게하면 arg (1)이 실제로 사용자 ID인지 확인하는 것을 줄일 수 있습니다. 또한

function accountselect_getclientaccount($account) { 
    return db_result(db_query('SELECT account FROM {users} WHERE uid = %d', $account->uid)); 
    } 

:

이 더 좋을 수도 사용자의 후크를 참조하십시오. (당신이 이미 일을하지 않는 경우)이로드 조작의 '계정'(COL)를 반환하는 가장 좋은 방법이 될 수

http://api.drupal.org/api/function/hook_user/6

+0

네가 맞아, 코드에 global $ user가 필요 없다. 나는 곧 그것을 제거했다. 지금까지 $ user-> uid까지는 현재 로그인 한 사용자의 uid를 반환합니다. arg (1)은 사용자가보고있는 사용자의 uid를 반환합니다. 이 기능의 목적은 선택 목록에서 사용자의 현재 계정을 기본값으로로드하는 것입니다. 그것은 일종의 고통이었습니다. '로드'작업이란 무엇입니까? 사용자가 상태를 편집합니까? – tpow

+0

편집 상태가 다른 상태이지만 옳습니다. 이 URL에서 해당 계정을로드 했으므로 다음과 같이 쓸 수 있습니다. function mymodule_user ($ op, & $ edit, & $ account, $ category) { if ($ op == 'load') { // $ 계정에 뭔가를하십시오 } } API에 올바른 방법으로 연결하면 너무 어렵지 않습니다. :) – Rimian