我在一个MySQL数据库中有两个相同的表:
一个名为"用户"和一个名为"键"。
出于测试目的,它们是相同的。
当我查询"用户"当我查询"键"时,我收到了回复。我一无所获。
查询用户我得到了预期的响应:
<?php
require('../db/connect.php');
$query = mysql_query("
SELECT name
FROM users
WHERE can_share = '".$_POST['URLkey']."'
");
echo mysql_result($query, 0);
?>
查询键我什么都没得到:
<?php
require('../db/connect.php');
$query = mysql_query("
SELECT name
FROM keys
WHERE can_share = '".$_POST['URLkey']."'
");
echo mysql_result($query, 0);
?>
我想我必须对数据库有一些基本的理解,但是经过几个小时的搜索,我无法弄清楚。也许我会变得迟钝。
答案 0 :(得分:0)
我认为这可能是因为表名是&#39;键&#39;。
看看这里: http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html
你必须在设计表时理解并命名MySQL本身保留某些单词的属性。
所以,如果你把你的桌子命名为&#39; WHERE&#39;你会在通常的查询中遇到麻烦。为什么呢?
'SELECT * FROM WHERE'
这样的查询显然不起作用,因为它会要求您提供表名。
现在,当您更改格式时,情况也会发生变化:
'SELECT * FROM `WHERE`'
如你所见,我添加了一些向后逗号。在MySQL中,它们用于表示表或字段的名称。如果您使用它们 - 服务器会正确处理和读取您的查询。
所以,这就是为什么你编辑的查询最终能正常工作的原因。
答案 1 :(得分:-1)
感谢enabeling debugging,我得到了这样的信息:
mysql_result()期望参数1是资源,布尔值是给定的 ...
并且发现我必须查询&#34;键&#34;像这样:
<?php
require('../db/connect.php');
$query = mysql_query("
SELECT `name`
FROM `keys`
WHERE `can_share` = '".$_POST['URLkey']."'
");
echo mysql_result($query, 0);
?>
现在它有效,但我仍然不明白为什么只有一个表格需要格式化。而且我已经知道我应该重写整个事情,以免受SQL injection attacks. ...
的攻击 编辑:好像是&#34;键&#34;和&#34;键&#34;并且some more由MySQL保留,因此要使用它们,必须按照这种格式进行格式化。