2014-12-04 3 views
1

사용자에게 편집 가능한 프로필을 만들려고합니다. 편집 버튼 (form-post)을 클릭하면 텍스트 영역, 입력 및 "complete editing"버튼에서 isset ($ _ POST [ "edit"])이있는 경우에만 편집 가능한 정보가있는 페이지가 반환됩니다. 그 필요성이 업데이트 기능을 데이터베이스에 새로운 정보를 시작하지만, 그것은`오류의 그것의 반환을 업데이트하지 :.비 객체의 멤버 함수 bind_param()을 호출합니다.

Call to a member function bind_param() on a non-object 

내 코드 :

if(isset($_POST["cedit"]) && !empty($_POST["fn"]) && !empty($_POST["ln"]) && !empty($_POST["desc"])){ 

    if($stmtq = $mysqli->prepare("UPDATE `sites`.`accounts` SET `fullname` = ? ,`description` = ? WHERE `id` = ? ") && !empty($_POST["fn"]) && !empty($_POST["ln"]) && !empty($_POST["desc"])){ 
     $stmtq->bind_param("ssd", $_POST["fn"]." ".$_POST["ln"], $_POST["desc"], $_SESSION["user_id"]); 
     $stmtq->execute(); 
     $stmtq->close(); 
    } 
} 
+0

'prepare()'직후에'print_r ($ stmtq);을 수행하십시오. 또한 오류 로그를 확인하고 스크립트에서 가장 먼저 error_reporting (E_ALL);을 추가하십시오. –

+0

Marcin the print_r ($ stmtq)가 1을 반환합니다. –

답변

5

당신은 운영자에 문제가 우선 순위에 따라 $stmtq은 준비된 명령문 대신 true 또는 false 부울이됩니다. 될 수있는 d.

이것은 동일한 조건부로 채워진 && 체인의 체인으로 인해 발생합니다. 그들은 과제 = 전에 발생합니다. ()을 추가하십시오. 기본적으로이 금액에 대신 의도

// $x is assigned the object 
if (($x = object) && (true && true)) 

// $x is always assigned a boolean 
if ($x = (object && true && true)) 

를 해결하려면 :

// Wrap the assignment in its own() group to isolate from the && conditions 
if (($stmtq = $mysqli->prepare("UPDATE `sites`.`accounts` SET `fullname` = ? ,`description` = ? WHERE `id` = ? ")) && !empty($_POST["fn"]) && !empty($_POST["ln"]) && !empty($_POST["desc"]) { 
    // Successful prepare() assignment and all other conditions 
    // Proceed with bind_param()/execute() 
} 

을이 라인의 몇 가지를 추가했지만, 쉽게 읽을 적은 것 prepare()을 수행하고 할당을 먼저 수행 한 다음 다른 조건의 유효성을 검사하거나 그 반대의 경우에 이러한 우선 순위 문제가 발생하기 쉽습니다.

if (!empty($_POST["fn"]) && !empty($_POST["ln"]) && !empty($_POST["desc"])) { 
    if ($stmtq = $mysqli->prepare(.....)) { 
    // All is well, proceed with bind_param()/execute() 
    } 
} 

맛있는 내용은 here is PHP's operator precedence chart입니다. && 논리 연산자의 우선 순위는 =보다 높습니다.

+0

Michael입니다. –

관련 문제