PHP MYSQL全选,结果中没有数据

时间:2016-05-24 22:12:21

标签: php mysql

它可能是另一个简单的解决方案,但我似乎无法找到它。每当我使用select all语句时,我的查询将显示有结果,但它不显示它们。它可以显示50个结果,并且没有行数据。任何帮助表示赞赏。我使用SELECT名称FROM的那一刻确实有效。

提前致谢。

$result = $mysqli->query("SELECT * FROM table");

while($row = $result->fetch_assoc())

{
echo "result<br>" . $row[name]."";
}

3 个答案:

答案 0 :(得分:1)

你有一个错字。 name在PHP中没有任何内容。您可能希望插入一个名为'name'的字符串作为关联数组的键,如下所示:

$result = $mysqli->query("SELECT * FROM table");

while($row = $result->fetch_assoc())

{
  echo "result: " . $row['name']."<br>";
}

或者你可以这样使用print_r()

print_r($row);

应该适合你。

答案 1 :(得分:1)

除了@Webeng提供的答案外,您的查询还包含另一个问题: table是一个mysql reserved keyword,在查询中使用时需要进行转义。如链接文档中所述,使用反引号(`)对它们进行转义。

答案 2 :(得分:0)

除非表 为空,否则您的结果很可能是因为无论“名称”是什么,它都不在返回的关联数组中。

另外,检查$result以确保没有错误,和/或打印记录集中找到的行数。

$result = $mysqli->query("SELECT * FROM table");

while ($row = $result->fetch_assoc()) {
    echo "Result: <br />";
    foreach ($row as $key => $value) {
        echo "    {$key} = {$value} <br />";
    }
}

可能在这里有一些奇怪的名称问题,导致发送给PHP的名为“name”(小写)的两个列。当您明确选择“名称”时,您将获得第一个。当您选择“*”并同时获取两者时,第二个将覆盖第一个。这可能发生在比您更复杂的查询中:

SELECT a.name, b.name FROM a JOIN b ...

返回人们可能期望的关联数组。

会发生同样的情况
SELECT * FROM a JOIN b ...

因为两者都有“名称”栏。

如果您从字面上查询name表中的table列(即“name”和“table”不仅仅是占位符),那么这就是SQL语法错误就在那里 - 您需要使用引号或刻度标记来转义表名。这似乎不太可能,因为你说用'name'替换星号确实有效。

解决方案

结果发现MySQL在处理名称时有点棘手,这对PHP方面有影响:

mysql> CREATE TABLE test1 ( Name integer );
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO test1 VALUES ( 5 );
Query OK, 1 row affected (0.00 sec)

mysql> select name from test1;
+------+
| name |
+------+
|    5 |
+------+
1 row in set (0.00 sec)

mysql> SELECT * from test1;
+------+
| Name |
+------+
|    5 |
+------+
1 row in set (0.00 sec)

第一个SELECT返回了一个名为“name”的字段。第二个返回一个名为“Name”的字段,大写为N.这两个字段不相同。

如果您打开了错误报告并且显示已激活,则应该看到一条PHP消息:

 PHP Notice:  Undefined index: Name in test.php on line 8

暴力调试

下次,除了将错误报告设置为最大值之外,您还可以打印出如下一行:

print_r(array_map('htmlentities', $row));
exit();

并检查浏览器中的行内容。我有一些奇怪的事情 - 从来没有这样,我会承认 - 由于你看到的是什么你得到的效果而发生在我身上。