2014-12-20 16 views
0

我得到這個錯誤:

開捕致命錯誤:類mysqli_result的對象無法轉換爲字符串j:\ XAMPP \ htdocs中\部件\ bo_testedit.php上線50

這是上bo_testedit.php線50:

ExecSQL (__FILE__, $mysqli, "DELETE FROM question_assign WHERE id_question = {$id}"); 

這是上functions_db.php

function ExecSQL ($scriptparent, $mysqli, $query) { 
    $mysqli->query ($query); 
    if ($mysqli->error != "") { DBErrorLogger ($scriptparent, $mysqli->error, $query); return $mysqli->error; } 
    return true; 
} 

,這也是對functions_db.php

function DBErrorLogger ($functionname, $error, $query = "") { 
    $logmessage = "<br>Functions_db.php:\nFunction <strong>{$functionname}</strong> raised error:<br>\n{$error}"; 
    if ($query != "") $logmessage = $logmessage . "<br>\nwhile executing this query: \n<strong>{$query}</strong>"; 
    Logger ($logmessage); 
} 

從我從谷歌上搜索得知,因爲我要的對象$mysqli->result存儲到一個字符串類型變量出現此錯誤。在這裏困擾我的一件事是,我沒有在所有這些代碼中訪問$mysqli->result。爲什麼它返回這樣的錯誤信息?我可以在bo_testedit.php的另一行訪問它,但它們看起來很好(返回正確的結果)。這個錯誤的行號有可能是不正確的(即參考另一行)?

編輯:對不起,很長的答覆。儘管我做了任何事情,問題仍然存在好幾天,但隨後問題突然消失,儘管我沒有做任何事情。我仍然不知道問題出在哪裏,但我確實希望它永遠不會再回來。謝謝你,對不起。

+2

'$ mysqli-> error'包含什麼?你可以給一個'var_dump();'? – Bono

+1

好像你可以修復錯誤,並通過使用準備好的語句和參數替換而不是字符串替換來獲得更好的注入安全性。 – RobP

+1

一個建議:不要檢查if($ mysqli-> error!=「」)'檢查返回值: '$ result = $ mysqli-> query($ query); if($ result === false) ' – RobP

回答

1
$query = "DELETE FROM question_assign WHERE id_question = ?"; 
if ($stmt = $mysqli->prepare($query)) { 
    $stmt->bind_param('i', $id); 
    /* execute query */ 
    $stmt->execute();  
    /*Count the rows*/ 
    if($stmt->num_rows > 0){ 
     echo 'It worked !'; 
    }else{ 
     var_dump($mysqli->error); 
     die(); 
    } 
    /* close statement */ 
    $stmt->close(); 
} 
/* close connection */ 
$mysqli->close(); 
+1

1)你從未將$ id綁定到查詢的參數,2)僅有代碼的答案實際上並沒有多大幫助。這與OP的代碼是完全不同的,儘管很多人可以這樣寫,但它並沒有闡明OP代碼的錯誤。 – RobP

+1

@RobP感謝您指出這一點,我已經調整過了,至於解釋我認爲這些評論是自我解釋的。我正在努力幫助OP,我認爲我不應該爲此付出任何代價,如果有任何事情您可以隨時編輯我的答案 – meda