2015-04-22 122 views
0

我的數據庫中有多個條目,但我的php代碼returns 0條目。檢索數據庫中的數據結果爲0結果

這裏是我的PHP:

error_reporting(E_ALL); 
 
ini_set('display_errors', 1); 
 

 
$conn = new mysqli($host, $user, $pass, $databasename); 
 

 
// Check connection can be established 
 
if ($conn->connect_error) { 
 
    die("Connection failed: " . $conn->connect_error); 
 
} 
 

 
$sql = "SELECT charts_URL, charts_date, charts_retrace, charts_start_of_swing_trade, charts_end_of_swing_trade, charts_bull_flag, charts_bear_flag, charts_ema_crossover, charts_trading_instrument FROM charts"; 
 

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

 
if($result && $result->num_rows > 0) { 
 
    // output data of each row 
 
    echo " 
 
    <table> 
 
     <tr> 
 
     <td><strong><u>Chart</u></strong></td> 
 
     <td><strong><u>Date</u></strong></td> 
 
     <td><strong><u>Retrace</u></strong></td> 
 
     <td><strong><u>Start of Swing Trade</u></strong></td> 
 
     <td><strong><u>End of Swing Trade</u></strong></td> 
 
     <td><strong><u>Bull flag</u></strong></td> 
 
     <td><strong><u>Bear flag</u></strong></td> 
 
     <td><strong><u>EMA Crossover</u></strong></td> 
 
     <td><strong><u>Trading Instrument</u></strong></td> 
 
     </tr>"; 
 
    while ($row=mysqli_fetch_array($sql)) { 
 
     echo "<tr><td><a href=" . $row['charts_URL']. "><img src=". $row['charts_URL']. "></a></td>"; 
 
     echo "<td>" . $row['charts_date']. "</td>"; 
 
     echo "<td>" . $row["charts_retrace"]. "</td>"; 
 
     echo "<td>" . $row["charts_start_of_swing_trade"]. "</td>"; 
 
     echo "<td>" . $row["charts_end_of_swing_trade"]. "</td>"; 
 
     echo "<td>" . $row["charts_bull_flag"]. "</td>"; 
 
     echo "<td>" . $row["charts_bear_flag"]. "</td>"; 
 
     echo "<td>" . $row["charts_ema_crossover"]. "</td>"; 
 
     echo "<td>" . $row["charts_trading_instrument"]. "</td></tr>"; 
 
    } 
 
    echo "</table>"; 
 
} else { 
 
    echo "0 results"; 
 
} 
 
$conn->close(); 
 
?>

很顯然,我切出實際的數據庫信息,如用戶名,密碼等,下面是我用來提交我的PHP代碼片段數據導入數據庫,將數據成功提交到數據庫中。

$sql = "INSERT into charts (charts_URL, charts_date, charts_retrace, charts_start_of_swing_trade, charts_end_of_swing_trade, charts_bullflag, charts_bearflag, charts_ema_crossover, charts_trading_instrument) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";

所以,你可以仔細檢查我的數據檢索/顯示的代碼和我的數據插入代碼之間的變量。我的數據插入代碼完美地工作。我在數據庫中看到通過表單提交的數據。但是,當我嘗試檢索數據並顯示它時,我會收到「0結果」消息。有任何想法嗎?

+0

您是否試過echo $ sql並在數據庫上運行實際查詢? – RGriffiths

+0

nope雖然沒有嘗試,但偉大的想法。我現在實際上已經開始工作了,所以這一切都很好。 – Thomas

回答

2

問題#1
你有錯別字查詢

INSERT ... charts_bullflag, charts_bearflag ... 
SELECT ... charts_bull_flag, charts_bear_flag ... 

您的列名的2個額外_SELECT

問題2:
你是對您的查詢字符串做fetch_array()

while ($row=mysqli_fetch_array($sql)) { 

你需要做的是在你的查詢結果 - $result

while ($row=mysqli_fetch_array($result)) { 

或者因爲你正在使用OOP風格爲您查詢,您還可以做你的循環中OOP風格

while ($row=$result->fetch_array(MYSQLI_NUM)) { 
+0

這是無關緊要的,因爲如果代碼失敗並且轉到我相信的其他代碼,那麼代碼永遠不會變得那麼遠。 –

+0

@DavidSoussan所以你說'while($ row = mysqli_fetch_array($ sql))'是正確的?這可能不是唯一的問題,但絕對不是無關緊要的。 – Sean

+0

我在說,這對OP問題來說是無關緊要的。當OP得到下一個問題時,OP可以按照StackOverflow的工作方式發佈新問題,或者應該可以工作。 –

1

嘗試改變

while ($row=mysqli_fetch_array($sql)) 

while ($row=mysqli_fetch_array($result)) 

正確的語法是

mysqli_fetch_array(result,resulttype); 

$ sql中只包含一個查詢字符串。

UPDATE: ,改變

if($result && $result->num_rows > 0) { 

if($result === false) 
{ 
    echo mysqli_error($conn); 
} 
else if(mysqli_num_rows($result) > 0) 
{ 
// Display result 
} 
else 
{ 
// 0 results... 
} 
+0

將其更改爲'while($ row = mysqli_fetch_array($ result))',但仍然爲0結果。 – Thomas

+0

檢查我更新的答案,我希望那些作品..! –

+1

@Nandan改變不是eqauls false什麼也不做,它在語義上是相同的測試。你需要做的是檢查查詢是否成功的自己。查看我的擴展答案以獲取更多信息。 –

1

由於要檢查$結果,如果是假的,那麼你會得到你的其他echo "0 results";

所以你需要檢查錯誤是什麼

if($result === false){ 
    echo mysqli_error($conn); 
} 

在對其他答案進行評論聊天之後,我決定在這裏擴展並解釋真正的問題。

如果您的查詢失敗,那麼mysqli查詢將返回false。這將終止IF語句的其餘處理而不處理其他條件;在這種情況下$ result-> num_rows()。

許多人認爲它是num_rows是零的錯誤,忘記了這個測試從未運行過。所以這是一個壞主意,即。難以調試,在查詢結果中包含IF中的多個條件。

首先通過測試$ result === false來檢查查詢是否成功:並且儘可能明確地寫入代碼中,因爲它完全像這樣寫,所以沒有人會誤解你的意圖。

然後,當您從查詢中獲得虛假返回時,您可以調試錯誤並修復查詢。之後,你可以擔心沒有得到你期望的查詢結果,即超過零行。

閱讀手冊以及如何捕獲和處理查詢錯誤的註釋http://php.net/manual/en/mysqli.error.php,因爲有很多方法可以做到這一點;還有很多方法可以在開發中做到這一點,因爲我們希望所有這些在投入生產之前都是固定的。