它可能是另一个简单的解决方案,但我似乎无法找到它。每当我使用select all语句时,我的查询将显示有结果,但它不显示它们。它可以显示50个结果,并且没有行数据。任何帮助表示赞赏。我使用SELECT名称FROM的那一刻确实有效。
提前致谢。
$result = $mysqli->query("SELECT * FROM table");
while($row = $result->fetch_assoc())
{
echo "result<br>" . $row[name]."";
}
答案 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();
并检查浏览器中的行内容。我有一些奇怪的事情 - 从来没有这样,我会承认 - 由于你看到的是什么不你得到的效果而发生在我身上。