-1

この構文で私を助けてください。これは正しいです?

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

ネット上のいくつかの例で、` 記号が axispl または companyname を囲むために使用されているのを見ました。いくつかの場合、それらは存在しません。違いはなんですか?

私のデータベースには 2 つの列があります。最初に会社名があります。2 番目には、該当するカテゴリがあります。基本的に、会社名が検索用語と一致する場合、クエリでこれらのペアのうち 11 個を選択する必要があります。

SELECT * に言及する必要がありますか、それとも SELECT companyname, axiscategory に言及する必要がありますか? (これらは 2 つの列の名前です)。

上記の構文が正しくない場合、何を変更すればよいですか?

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応じてあらゆる種類のクレイジーな記号が含まれます。from2550100

ただし、それはさておき、検索語は文字列であるため、引用符で囲む必要があります。

于 2012-12-23T15:12:51.250 に答える
0

違いはなんですか?

違いはありません。

バックティック記号は、識別子名として無効な識別子で使用されます。たとえば、予約語として名前が付けられた列がある場合、この場合、バックティック記号を使用してそれらをエスケープする必要があります。

あなたの場合、は有効な識別子の名前であるため、列で`記号を使用することはオプションです。

SELECT *について言及する必要がありますか、それともSELECTの会社名、axiscategoryについて言及する必要がありますか?

SELECT *を使用せず、列の名前に明示的に名前を付けることをお勧めします。

于 2012-12-23T15:13:13.910 に答える
0

まず、返される列を指定することは常に良い考えです。そうすれば、必要な実際のデータのみを返すようにすることができます。これほど小さいテーブルの場合、それほど重要ではないかもしれませんが、50列と100 000行があり、最初の2列のリストが必要な場合はどうでしょうか。

列名とテーブル名を引用することは良い習慣ですが、名前に予約語(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 に答える