-1

请帮助我使用这种语法。它是否正确?

$query = mysql_query("SELECT * FROM axispl WHERE companyname LIKE $searchterm% LIMIT 11");

在网上的几个例子中,我看到`符号被用来包围axispl或公司名。在少数情况下,他们不存在。有什么不同?

我的数据库有 2 列。首先有公司名称。其次是他们所属的类别。当公司名称与搜索词匹配时,我基本上希望查询选择其中的 11 对。

我应该提到 SELECT * 还是应该提到 SELECT companyname, axiscategory ?(这些是两列的名称)。

如果上面的语法不正确,我应该改变什么?

4

4 回答 4

0

您需要用单引号引用搜索词。

$query = mysql_query("SELECT * FROM axispl WHERE companyname LIKE '".mysql_real_escape_string($searchterm)."%' LIMIT 11");

是否使用SELECT *或指定列并不重要 - 后者通常会快一点,但如果您需要所有列通常并不重要。

关于您的引用问题:

  • 始终转义传递给查询的字符串。
  • 使用单引号来引用查询中使用的字符串
  • 反引号用于引用数据库/表/列名称,并且仅在它们与保留关键字冲突时才需要。
于 2012-12-23T15:12:33.123 回答
0

反引号用于确保它们包含的内容被视为数据库、表或列名,无论上下文需要什么。除了使它更易于阅读之外,它还允许您使用任何列名,包括保留字,如count, timestamp, from, 数字列名25,50以及100所有类型的疯狂符号(如果您真的想要的话)。

但是,除此之外,您的搜索词应该用引号引起来,因为它是一个字符串。

于 2012-12-23T15:12:51.250 回答
0

有什么不同?

没有区别。

反引号符号与作为标识符名称无效的标识符一起使用。例如,如果您有一个名为保留字的列,在这种情况下,您必须使用反引号符号来转义它们。

在您的情况下,可以在列中使用 ` 符号,因为它们是有效的标识符名称。

我应该提到 SELECT * 还是应该提到 SELECT companyname, axiscategory ?

建议不要SELECT *显式使用和命名列的名称。

于 2012-12-23T15:13:13.910 回答
0

首先,告诉您要返回哪些列总是一个好主意,这样您就可以确保只返回所需的实际数据。对于这么小的表,它可能无关紧要,但是如果您有 50 列和 100 000 行并且您只想要前两列的列表怎么办?

引用列名和表名是一种很好的做法,但当您碰巧在名称中使用保留字(如 SELECT、FROM、ADD、DELETE 等)时,它并不是一直都需要的。

同样在您的查询中,您需要对 LIKE 的查询进行单引号,因为它想要的是一个字符串。

$query = mysql_query("SELECT `companyname`, `axiscategory` FROM `axispl` WHERE `companyname` LIKE '$searchterm%' LIMIT 11");
于 2012-12-23T15:16:33.563 回答