从数据库中检索数据会得到0结果

时间:2015-04-22 17:12:09

标签: php mysql database

我的数据库中有多个条目,但我的php代码returns 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();   
?>
&#13;
&#13;
&#13;

显然,我删除了实际的数据库信息,例如用户名,密码等。这里是我的PHP代码片段,我用它将数据提交到数据库中,数据库成功地将数据提交到数据库中。

&#13;
&#13;
 $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 (?, ?, ?, ?, ?, ?, ?, ?, ?)";
&#13;
&#13;
&#13;

因此,您可以仔细检查我的数据检索/显示代码和我的数据插入代码之间的变量。我的数据插入代码完美无缺。我在数据库中看到通过表单提交的数据。但是当我尝试检索数据并显示它时,我得到了一个&#34; 0结果&#34;信息。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

问题#1
您的查询中存在拼写错误

start: function() {
    b.start( this.process.bind(this) );
},

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

中的2个列名中有额外的_

问题#2
您正在查询字符串

上执行SELECT
fetch_array()

您需要在查询结果中执行此操作 - while ($row=mysqli_fetch_array($sql)) {

$result

或者因为您在查询中使用OOP样式,所以您也可以在OOP样式中进行循环

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

答案 1 :(得分:1)

尝试更改

while ($row=mysqli_fetch_array($sql))

while ($row=mysqli_fetch_array($result))

正确的语法是

mysqli_fetch_array(result,resulttype);

$ sql只包含查询字符串。

更新: 并且还要改变

 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...
}

答案 2 :(得分:1)

由于您正在检查$ result,如果它是false,那么您将获得其他echo "0 results";

所以你需要检查错误是什么

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

在对其他答案进行评论聊天后,我决定扩展并解释真正的问题。

如果查询失败,则mysqli查询将返回false。这将终止IF语句的其余处理而不处理其他条件;在这种情况下$ result-&gt; num_rows()。

许多人错误地认为num_rows为零,忘记了这个测试从未运行过。所以这是一个坏主意,即。难以调试,在查询结果的IF中包含多个条件。

首先通过测试$ result === false来检查查询是否成功:并且通过编写完全相同的方式显示您的代码,因此没有人可以误解您的意图。

然后,当您从查询中获得错误的返回时,您可以调试错误并修复查询。之后,您可以担心无法获得预期的查询结果,即超过零行。

阅读本手册及有关如何捕获和处理查询错误http://php.net/manual/en/mysqli.error.php的注释,因为有很多方法可以做到这一点;在开发过程中有许多方法可以选择生产,因为我们希望在投入生产之前解决所有这些问题。