2010-05-12 4 views
4

나는 행운을 얻을 수 있도록 Google에 도움을 요청했습니다. :-( 다음 오류를 생성하는 특정 코드는 것은 :.클래스 mysqli_result의 객체를 문자열로 변환 할 수 없습니다.

function update_confirm_field($code) { 

    $uname = $this->conn->query("SELECT usr FROM tz_members WHERE 
        confirm='".$code."'"); 

    $this->conn->query("UPDATE tz_members SET confirm='yes' WHERE 
        usr='".$uname."'"); 
} 

내가 멍청한 짓을 놓친 경우에 저를 용서 사람이 원인을 무엇을 말해 줄 수 :

$this->conn->query("UPDATE tz_members SET confirm='yes' WHERE usr='".$uname."'"); 

전체 기능은 다음과 같다 문제 mysql_result 객체가 아닌 문자열을 첫 번째 쿼리에 의해 반환

+0

사람들이 충분한 노력을 기울일 것으로 생각되면 더 많은 질문에 답변해야합니다. –

답변

6

문제는 $ uname은 문자열이 아니라 객체입니다. 데이터에 액세스하려면 $ uname의 메소드 중 하나를 호출해야합니다.

function update_confirm_field($code) { 

    $uname = $this->conn->query("SELECT usr FROM tz_members WHERE 
        confirm='".$code."'"); 

    while ($row = $uname->fetch_assoc()) { 

    $this->conn->query("UPDATE tz_members SET confirm='yes' WHERE 
        usr='".$row["usr"]."'"); 

    } 

} 

(또는 위의 해결 방법 중 하나).

+0

EDIT :^첫 번째 쿼리의 결과에서 두 개 이상의 행이 반환되면 코드가 손상되지 않는다고 가정합니다. 어느 시점에서 $ uname-> num_rows()를 호출하는 것은 나쁜 생각이 아닙니다. 더 나은 방법은 MySQL 테이블을 수정하고 confirm = 'yes'를 설정하는 대신 새로운 bool 열을 만든 다음 확인 열을 고유하게 만듭니다. – wash

1

$ uName의이다 ???하시기 바랍니다. 당신이 그것을 내가를 사용하기 위해 그 결과에서 데이터를 가져 오기합니다 두 번째 쿼리.

while ($row = mysql_fetch_assoc($result)) { 
    echo $row["usr"]; 
} 
0

query 방법은 그냥 직접 응답을 덤프하지 않으며, 질의 결과의 포인터/개체를 반환합니다. 당신은 다음과 같은 것을 할 필요가 있습니다

0
$updateQuery = "UPDATE tz_members SET confirm='yes' WHERE usr= (SELECT usr FROM tz_members WHERE confirm='".$code."')"; 

// Get name and update in the same query 
$this->conn->query($updateQuery); 
관련 문제