我的数据库中有多个条目,但我的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;
显然,我删除了实际的数据库信息,例如用户名,密码等。这里是我的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 (?, ?, ?, ?, ?, ?, ?, ?, ?)";
&#13;
因此,您可以仔细检查我的数据检索/显示代码和我的数据插入代码之间的变量。我的数据插入代码完美无缺。我在数据库中看到通过表单提交的数据。但是当我尝试检索数据并显示它时,我得到了一个&#34; 0结果&#34;信息。有什么想法吗?
答案 0 :(得分:2)
问题#1
您的查询中存在拼写错误
start: function() {
b.start( this.process.bind(this) );
},
INSERT ... charts_bullflag, charts_bearflag ...
SELECT ... charts_bull_flag, charts_bear_flag ...
_
问题#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的注释,因为有很多方法可以做到这一点;在开发过程中有许多方法可以选择生产,因为我们希望在投入生产之前解决所有这些问题。