2015-12-11 76 views
0

在我的PHP代碼中,我很容易將記錄寫入數據庫,但出於某種原因,我無法讀取任何條目。我的PHP代碼:無法通過PHP查詢MySQL數據庫

$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "SELECT * FROM companies"; 

if ($conn->query($sql) === TRUE) 
{ 
    echo "query success"; 

    while($row = $result->fetch_assoc()) 
    { 
     echo "ID: " . $row["ID"]. " - Name: " . $row["name"]. "<br>"; 
    } 
} 
else 
{ 
    echo "query failure"; 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 


$sql = "INSERT INTO companies (name) 
     VALUES ('mycompany')"; 

if ($conn->query($sql) === TRUE) 
{ 

    echo "insert success"; 
} 
else 
{ 
    echo "insert failure"; 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 

我從瀏覽器中得到當我運行它的輸出是: query failureError: SELECT * FROM companies insert success

我試着在這$ SQL字符串撇號,插入記號,報價變化。我試過在HeidiSQL中運行這個查詢,它工作正常。任何想法,我要去錯了嗎?任何關於更基本的東西的建議,我可以嘗試縮小問題的根源?

謝謝!

+1

其實你不綁定您的查詢的結果,如果'($結果= $ conn->查詢($ SQL))'。但這不是你問題的根源,請看看['mysqli_error'](http://php.net/manual/en/mysqli.error.php)和['error_reporting(-1);'](http ://php.net/manual/en/function.error-reporting.php)。 – Qirel

+0

您應該考慮使用條件,以便運行select或運行插入,或者在select之後運行插入,或者在insert之後運行select。現在,您的代碼重新使用相同的變量,而無需對該變量賦予新值時的任何控制。 –

回答

5

使用mysqli->query()SELECT語句返回mysqli_result一個實例。它與真(=== true)不完全相同,但它也不代表錯誤。

此外,$result未定義。

使用這個代替:

$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "SELECT * FROM companies"; 

if (($result = $conn->query($sql)) !== FALSE) 
{ 
    echo "query success"; 

    while($row = $result->fetch_assoc()) 
    { 
     echo "ID: " . $row["ID"]. " - Name: " . $row["name"]. "<br>"; 
    } 
} 
else 
{ 
    echo "query failure"; 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 
... 

這只是改變了你的=== TRUE檢查!== FALSEMySQLi::query()在失敗時返回布爾值FALSE,對於沒有結果集的成功查詢,布爾值爲TRUE,對結果集成功則返回mysqli_result。 這也將query()的結果分配到$result

+0

看起來像OP起飛不說再見,不留下一個不錯的提示;-) –

+0

大家好評。我會說我收到的所有信息都有助於解決這個問題。其實我在想也許我應該這樣做來測試查詢結果'$ result = $ conn-> query($ sql);如果($ result-> num_rows> 0)'任何人都同意這一點? – mitch

+0

@mitch是的,這會更有意義米奇,但它可能會失敗(在某些時候),你將需要使用一個'WHERE'子句(它可以更好地工作)>>>取決於你真正想要的東西達到這裏。你可以在查詢錯誤時使用'mysqli_error($ conn)',或者混合使用。 –

1

您尚未將查詢結果分配給$result變量。

$conn = new mysqli($servername, $username, $password, $dbname); 
    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 

    $sql = "SELECT * FROM companies"; 
    $result = $conn->query($sql); 
    if ($result === TRUE) 
    { 
     echo "query success"; 

     while($row = $result->fetch_assoc()) 
     { 
      echo "ID: " . $row["ID"]. " - Name: " . $row["name"]. "<br>"; 
     } 
    } 
    else 
    { 
     echo "query failure"; 
     echo "Error: " . $sql . "<br>" . $conn->error; 
    } 


    $sql = "INSERT INTO companies (name) 
      VALUES ('mycompany')"; 

    if ($conn->query($sql) === TRUE) 
    { 

     echo "insert success"; 
    } 
    else 
    { 
     echo "insert failure"; 
     echo "Error: " . $sql . "<br>" . $conn->error; 
    } 
1

的問題是,一個SELECT查詢將返回成功不是一個布爾一個mysqli_result對象。只有當查詢失敗時,它是否會返回一個布爾值FALSE;

因此,你應該使用這樣的:

$result = $conn->query($sql); 

if ($result !== FALSE){ 
    while($row = $result->fetch_assoc()) 
    { 
     echo "ID: " . $row["ID"]. " - Name: " . $row["name"]. "<br>"; 
    } 
} 
1

只是改變你的,如果條件: -

if ($result = $conn->query($sql)) 
{ 
    echo "query success"; 

    while($row = $result->fetch_assoc()) 
    { 
     echo "ID: " . $row["id"]. " - Name: " . $row["name"]. "<br>"; 
    } 
}