|
Prev: Conditional INNER JOIN
Next: Searching shopping cart
From: Ron Piggott on 28 May 2008 20:13 I am trying to add a search feature to my shopping cart. I am wanting to use PHP to develop the query for mySQL. I have the following code figured out: foreach(explode(" ", $keyword) as $key) $query .= " $key, "; This produces: WHERE shopping_cart_product.product_description IN ( Jesus, is, Lord, ) The weakness is the trailing , after the last word the user types in. How can I eliminate this? Ron
From: Chris on 28 May 2008 20:21 Ron Piggott wrote: > I am trying to add a search feature to my shopping cart. > > I am wanting to use PHP to develop the query for mySQL. I have the > following code figured out: > > foreach(explode(" ", $keyword) as $key) $query .= " $key, "; I hope this isn't a copy/paste from your code as it's going to cause problems with sql queries (put a ' in one of your keywords and see what happens). If it is, you need to use mysql_real_escape_string. If it's not, then ignore :P > This produces: > > WHERE shopping_cart_product.product_description IN ( Jesus, is, Lord, ) > > The weakness is the trailing , after the last word the user types in. The easiest way would be to do something like this: $keyword_search = ''; foreach(explode(" ", $keyword) as $key) { $keyword_search .= "'" . mysql_real_escape_string($key) . "', "; } // take off the last 2 chars - one is a 'space' and the other is the last ',' $keyword_search = substr($keyword_search, 0, -2); -- Postgresql & php tutorials http://www.designmagick.com/
From: Ron Piggott on 28 May 2008 20:52 I am not sure why this isn't bringing any results: WHERE shopping_cart_product.product_description IN ('straying') The word straying is in the midst of one of the descriptions. Ron On Wed, 2008-05-28 at 20:13 -0400, Ron Piggott wrote: > I am trying to add a search feature to my shopping cart. > > I am wanting to use PHP to develop the query for mySQL. I have the > following code figured out: > > foreach(explode(" ", $keyword) as $key) $query .= " $key, "; > > This produces: > > WHERE shopping_cart_product.product_description IN ( Jesus, is, Lord, ) > > The weakness is the trailing , after the last word the user types in. > > How can I eliminate this? > > Ron -- ron.piggott(a)actsministries.org www.actsministrieschristianevangelism.org Acts Ministries Christian Evangelism "Where People Matter" 12 Burton Street Belleville, Ontario, Canada K8P 1E6 In Belleville Phone : (613) 967-0032 In North America Call Toll Free : (866) ACTS-MIN Fax: (613) 967-9963
From: Chris on 28 May 2008 21:37 Ron Piggott wrote: > I am not sure why this isn't bringing any results: > > WHERE shopping_cart_product.product_description IN ('straying') > > The word straying is in the midst of one of the descriptions. Ahh, oops - didn't notice that before. "IN()" looks for specific entries, so unless the entry is "straying" and *only* "straying" it will not be found. You can either use full text indexes (http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html) or "like" searches: where description like '%straying%' or description like '%another word%'; full-text works best on a big, random database (if you have a lot of keywords that are the same it won't work very well). -- Postgresql & php tutorials http://www.designmagick.com/
From: Thodoris on 4 Jun 2008 02:11
O/H Ron Piggott ??????: > I am trying to add a search feature to my shopping cart. > > I am wanting to use PHP to develop the query for mySQL. I have the > following code figured out: > > foreach(explode(" ", $keyword) as $key) $query .= " $key, "; > > This produces: > > WHERE shopping_cart_product.product_description IN ( Jesus, is, Lord, ) > > The weakness is the trailing , after the last word the user types in. > > How can I eliminate this? > > Ron > > > You can alternative use implode which I think is a much better choice because it does exactly what you need. You can use it like this $keys = implode(",",$keyword); $query .= $keys; This is the reference in the manual: http://gr2.php.net/manual/en/function.implode.php -- Thodoris |