请帮我解释这个语法。这是对的吗?
$query = mysql_query("SELECT * FROM axispl WHERE companyname LIKE $searchterm% LIMIT 11");
在网上的几个例子中,我看到`符号用于包含axispl或companyname。少数人不在场。有什么区别?
我的数据库有2列。首先有公司名称。其次是他们所属的类别。当公司名称与searchterm匹配时,我基本上希望查询选择其中的11对。
我应该提一下SELECT *还是应该提一下SELECT companyname,axiscategory? (这些是两列的名称)。
如果上述语法不正确,我应该更改什么?
答案 0 :(得分:0)
您需要使用单引号引用搜索字词。
$query = mysql_query("SELECT * FROM axispl WHERE companyname LIKE '".mysql_real_escape_string($searchterm)."%' LIMIT 11");
如果你使用SELECT *
或指定列并不重要 - 后者通常是小位更快但是如果你还需要所有列通常无关紧要。
关于你的引用问题:
答案 1 :(得分:0)
反引号用于确保它们包含的内容被视为数据库,表或列名称,无论上下文要求如何。除了使其更具人性化外,它还允许您使用字面上的任何列名称,包括count
,timestamp
,from
等保留字,数字列名{{1} },25
,50
以及各种疯狂的符号,如果你真的想要的话。
但是,除此之外,您的搜索字词应该是引号,因为它是一个字符串。
答案 2 :(得分:0)
有什么区别?
没有区别。
反引号符号与标识符一起使用,这些标识符作为标识符名称无效。例如,如果您有一个名为保留字的列,在这种情况下,您必须使用反引号符号来转义它们。
在您的情况下,可以选择在列中使用`符号,因为它们是有效的标识符名称。
我应该提一下SELECT *还是应该提一下SELECT companyname, axiscategory?
建议不要使用SELECT *
并明确命名列的名称。
答案 3 :(得分:0)
首先,告诉您返回哪些列总是一个好主意,这样您就可以确保只返回所需的实际数据。对于一个这么小的表,它可能并不重要,但是如果你有50列和100 000行而你只需要前两列的列表呢?
引用列名和表名是一种很好的做法,当你碰巧在名字中使用reserved word(如SELECT,FROM,ADD,DELETE等)时,它不会一直保存你的名字。
同样在您的查询中,您需要单个引用LIKE的查询,因为它需要一个字符串。
$query = mysql_query("SELECT `companyname`, `axiscategory` FROM `axispl` WHERE `companyname` LIKE '$searchterm%' LIMIT 11");