2017-09-13 71 views
0

我有問題,從我的MySQL數據庫處理信息,我有這樣的代碼:

$sql = "SELECT * FROM obojok WHERE id_uzivatela = '".$_SESSION['uzivatel']['id']."' AND id_zvierata IS NULL"; 
     $res = $conn->query($sql); 
     if ($res === TRUE) { 
     echo "DATA Obtained"; 
     } else { 
     echo "Error: " . $sql . "<br>" . $conn->error; 
     } 

但我唯一得到的是這樣的錯誤:

Error: SELECT * FROM obojok WHERE id_uzivatela = '******' AND id_zvierata IS NULL
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'is null AND id_uzivatela='20170'' at line 1

+3

錯誤與您的查詢不符 –

+0

您的意思是? – majkx00

+0

他意味着'是null AND id_uzivatela ='20170'(來自錯誤消息)無處可尋找您的實際查詢。您可能需要再次檢查您在此顯示的代碼是否正確拷貝了 – Cashbee

回答

-2

SELECT * FROM obojok WHERE id_uzivatela ='「。$ _ SESSION ['uzivatel'] ['id']。''OR id_zvierata IS NULL

+0

這不是一個解決方案@Adrian Wolff –

+0

你爲什麼改變查詢的行爲?現在情況很好。 – Salketer

0

錯誤不在查詢中。至少,不是在問題中發佈的查詢中。

錯誤出現在PHP代碼中。

A SELECT查詢從不返回TRUE。它成功時返回一個對象。可以是mysqli_resultPDOStatement,具體取決於您使用的MySQL庫。

您的查詢成功,$res是一個對象。它不是TRUE,測試$res === TRUE失敗,代碼錯誤地運行else分支。然後,它會報告剛剛成功運行的正確查詢以及最近失敗查詢的錯誤消息。這解釋了錯誤消息中服務器列出的查詢片段與您運行的查詢不匹配的原因。

檢查查詢結果的正確方法是$res != FALSE。如果使用=====$res是一個對象(與FALSE不管比較如何)或FALSE不等,則無關緊要。您也可以使用$res。這是同樣的事情:

$sql = "SELECT * FROM obojok WHERE id_uzivatela = '".$_SESSION['uzivatel']['id']."' AND id_zvierata IS NULL"; 
$res = $conn->query($sql); 
if ($res) { 
    echo "DATA Obtained"; 
} else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 

根據你使用MySQL庫,閱讀更多關於mysqli::query()和/或PDO::query()

1

您的查詢沒有問題...您看到的錯誤來自另一個查詢。

從技術文檔中,$返回如果你想看看您的查詢工作,不要真值測試conn->查詢不應該嚴格等於TRUE

Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object.

,你最好測試在沒有虛假...

$sql = "SELECT * FROM obojok WHERE id_uzivatela = '".$_SESSION['uzivatel']['id']."' AND id_zvierata IS NULL"; 
    $res = $conn->query($sql); 
    if ($res != FALSE) { 
    echo "DATA Obtained"; 
    } else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
    } 

編輯: 我已經完全忘了要注意的是,因爲你看到的錯誤是從另一個查詢來了,你要修復查詢呢!一個習慣寫這樣的查詢時,我有很長一段時間是它這樣寫:

$sql = "SELECT * FROM obojok WHERE id_uzivatela = '".$_SESSION['uzivatel']['id']."' AND id_zvierata IS NULL"; 
$res = $conn->query($sql) or throw new Exception("Error: " . $sql . "<br>" . $conn->error); 

這意味着使$水庫=到$ conn->查詢值,如果它不等於假。如果它是錯誤的,用相關信息拋出異常。

如果你這樣做,如果$ res是好的,你將不必測試。它也將極大地幫助您找到發生錯誤的位置。