从PHP查询不同的MySQL表

时间:2014-07-08 21:55:41

标签: php mysql ajax

谷歌搜索了几个小时,我对此很陌生。

我在一个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);

?>

我想我必须对数据库有一些基本的理解,但是经过几个小时的搜索,我无法弄清楚。也许我会变得迟钝。

2 个答案:

答案 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保留,因此要使用它们,必须按照这种格式进行格式化。