2015-04-22 80 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,因为有很多方法可以做到这一点;还有很多方法可以在开发中做到这一点,因为我们希望所有这些在投入生产之前都是固定的。