philzman Posted February 4, 2008 Posted February 4, 2008 Hello. Using an older version of OsCommerce, I came across the old "Unknown column" error. I've read this forum and found the solution, changed stuff to "p2c.products_id" as suggested, and all works well except for the Manufacturers list. Once I click any manufacturer, I get this error : 1054 - Unknown column 'p2c.products_id' in 'where clause' select count(p.products_id) as total from (products p, products_description pd, manufacturers m) left join specials s on p2c.products_id = s.products_id where p.products_status = '1' and pd.products_id = p2c.products_id and pd.language_id = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '10' [TEP STOP] I don't know what to do, I've googled for answers and nothing was conclusive...
Mav666 Posted February 4, 2008 Posted February 4, 2008 I never had that error, hence never had to fix it, but I think you may have fixed too much or not enough. The aliases p, pd and m are defined within your query, p2c is not - I would guess you either have to pull the products_id from a column out of the tables you name in your from (...) or add the p2c table and its proper alias into the from part. Hope this helps ... Even at a Mensa convention someone is the dumbest person in the room.
philzman Posted February 4, 2008 Author Posted February 4, 2008 The "fixed too much" part would make sense, since I used "Find & Replace" to replace everything in index.php to p2c.products_id instead of p.products_id. Unfortunately I don't know how to do what you suggested so can you dumb it down a little ?
Mav666 Posted February 4, 2008 Posted February 4, 2008 Have you tried to change it back to p.products_id in the query and see what happens? That should do the trick I believe ... Even at a Mensa convention someone is the dumbest person in the room.
philzman Posted February 4, 2008 Author Posted February 4, 2008 Okay I replaced everything back on the whole file just to see what happens, and I got the initial 1054 error that I had, but the manufacturers worked fine. So obviously I need to change it back to p2c. and only leave p. in certain places. The question is, where ? I replaced it on the line that had m.manufacturers_id (it's in the error) and it still does that.
Mav666 Posted February 4, 2008 Posted February 4, 2008 *groan* ... I'm sorry, when I said 'change it back to p.products_id in the query' I meant only in that particular query. ;) Even at a Mensa convention someone is the dumbest person in the room.
philzman Posted February 4, 2008 Author Posted February 4, 2008 Yes I know what you meant, but like I said I just wanted to see what happens. Hence my question, how do I figure out which query I need to edit ? I'm sorry I'm not a coder.
Mav666 Posted February 4, 2008 Posted February 4, 2008 Probably only those that already make reference to p2c and TABLE_PRODUCTS_TO_CATEGORIES, otherwise mysql won't know what p2c is in the first place. Even at a Mensa convention someone is the dumbest person in the room.
philzman Posted February 4, 2008 Author Posted February 4, 2008 Well I searched for "TABLE_PRODUCTS_TO_CATEGORIES" and replaced p2c.products_id back to p.products_id on every line that had it, and it still gives me an error. The original error isn't present though, the one which would appear if I replaced all the p2c.products_id... EDIT : BTW, thanks for the patience. EDIT 2 : I edited another line and now it seems to work !! Thanks a bunch man.
Mav666 Posted February 4, 2008 Posted February 4, 2008 Glad it worked! Even at a Mensa convention someone is the dumbest person in the room.
philzman Posted February 5, 2008 Author Posted February 5, 2008 Ok, now I got a new problem, probably because of something I did yesterday while fixing the previous error. I get two errors which I never got before.. Now whenever I click a subcategory, I get this : " 1054 - Unknown column 'p.categories_id' in 'where clause' select count(p.products_id) as total from ((products_description pd, products p) left join manufacturers m on p.manufacturers_id = m.manufacturers_id, products_to_categories p2c) left join specials s on p.products_id = s.products_id where p.products_status = '1' and p.products_id = p.products_id and pd.products_id = p.products_id and pd.language_id = '1' and p.categories_id = '65' [TEP STOP]" I also get this in specials.php now : "1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-9, 9' at line 1 select p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, p.products_image, s.specials_new_products_price from products p, products_description pd, specials s where p.products_status = '1' and s.products_id = p.products_id and p.products_id = pd.products_id and pd.language_id = '1' and s.status = '1' order by s.specials_date_added DESC limit -9, 9 [TEP STOP]" This is killing me.. :(
♥geoffreywalton Posted February 5, 2008 Posted February 5, 2008 you seem to be getting problem when your server is using mysql5 and your shop is unpatched. You also seem to have the negative limit problem limit -20, 20. If I am correct patches to correct this are included with each release of Oscommerce and are generally in the extras directory. The files have names like update-yyyymmdd.html and update-yyyymmdd.txt. These files contain a shed load of patches that should be applied to a stock install, but as this is not shown as a step in the documentation / installation instruction that I have read, most people won't until they run into a problem. Then they will find a solution to one problem via the forums. Here is the index of my updates fle. osCommerce 2.2 Milestone 2 Update 051113 Update Package 13th November 2005 ------------------------------------------------------------------------------ Table of Contents ------------------------------------------------------------------------------ ## Update 051113 customer_country_id in addressbook ## Update 051112 Cannot re-assign $this limit -20, 20 Database Input Enhancement Adding Non-Existing Products To Cart Session ID XSS Issue Validate Session ID File Manager Problem HTTP Header Injection E-Mail Header Injection Contact Us Form XSS Issue Open Redirector Extra Slashes In New Products Order Status Filtering MySQL 5.0 Compatibility This is a link to a later one http://www.oscommerce.com/ext/update-20060817.txt These threads might also be of use http://www.oscommerce.com/community/contributions,4654 http://www.oscommerce.com/community/contributions,3727/ http://www.oscommerce.com/forums/index.php?showtopic=179130 http://www.oscommerce.com/ext/update-20060817.txt And here are the MySQL 5.0 Compatibility entries from my updates file ------------------------------------------------------------------------------ MySQL 5.0 Compatibility ------------------------------------------------------------------------------ Problem: MySQL 5.0 introduces Server SQL modes as part of its SQL 2003 standards support, and uses a more stricter approach to executing SQL queries. This is performed by default with setting STRICT_TRANS_TABLES as a Server SQL mode. Due to this new setting, MySQL fails on certain SQL queries and produces error messages on the screen. Solution: Lines 213-223 in catalog/advanced_search_result.php must be changed from: $from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id) left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c"; if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) { if (!tep_session_is_registered('customer_country_id')) { $customer_country_id = STORE_COUNTRY; $customer_zone_id = STORE_ZONE; } $from_str .= " left join " . TABLE_TAX_RATES . " tr on p.products_tax_class_id = tr.tax_class_id left join " . TABLE_ZONES_TO_GEO_ZONES . " gz on tr.tax_zone_id = gz.geo_zone_id and (gz.zone_country_id is null or gz.zone_country_id = '0' or gz.zone_country_id = '" . (int)$customer_country_id . "') and (gz.zone_id is null or gz.zone_id = '0' or gz.zone_id = '" . (int)$customer_zone_id . "')"; } $where_str = " where p.products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id "; to: $from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id) left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id"; if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) { if (!tep_session_is_registered('customer_country_id')) { $customer_country_id = STORE_COUNTRY; $customer_zone_id = STORE_ZONE; } $from_str .= " left join " . TABLE_TAX_RATES . " tr on p.products_tax_class_id = tr.tax_class_id left join " . TABLE_ZONES_TO_GEO_ZONES . " gz on tr.tax_zone_id = gz.geo_zone_id and (gz.zone_country_id is null or gz.zone_country_id = '0' or gz.zone_country_id = '" . (int)$customer_country_id . "') and (gz.zone_id is null or gz.zone_id = '0' or gz.zone_id = '" . (int)$customer_zone_id . "')"; } $from_str .= ", " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c"; $where_str = " where p.products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id "; The following lines must be replaced in catalog/index.php: Line 175, from: $listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "'"; to: $listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "'"; Line 178, from: $listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where p.products_status = '1' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'"; to: $listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m where p.products_status = '1' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'"; Line 184, from: $listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "'"; to: $listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "'"; Line 187, from: $listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where p.products_status = '1' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "'"; to: $listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "'"; Line 292 in catalog/admin/categories.php must be changed from: tep_db_query("insert into " . TABLE_PRODUCTS . " (products_quantity, products_model,products_image, products_price, products_date_added, products_date_available, products_weight, products_status, products_tax_class_id, manufacturers_id) values ('" . tep_db_input($product['products_quantity']) . "', '" . tep_db_input($product['products_model']) . "', '" . tep_db_input($product['products_image']) . "', '" . tep_db_input($product['products_price']) . "', now(), '" . tep_db_input($product['products_date_available']) . "', '" . tep_db_input($product['products_weight']) . "', '0', '" . (int)$product['products_tax_class_id'] . "', '" . (int)$product['manufacturers_id'] . "')"); to: tep_db_query("insert into " . TABLE_PRODUCTS . " (products_quantity, products_model,products_image, products_price, products_date_added, products_date_available, products_weight, products_status, products_tax_class_id, manufacturers_id) values ('" . tep_db_input($product['products_quantity']) . "', '" . tep_db_input($product['products_model']) . "', '" . tep_db_input($product['products_image']) . "', '" . tep_db_input($product['products_price']) . "', now(), " . (empty($product['products_date_available']) ? "null" : "'" . tep_db_input($product['products_date_available']) . "'") . ", '" . tep_db_input($product['products_weight']) . "', '0', '" . (int)$product['products_tax_class_id'] . "', '" . (int)$product['manufacturers_id'] . "')"); The following SQL queries need to be performed: ALTER TABLE whos_online MODIFY COLUMN last_page_url VARCHAR(255) NOT NULL; ALTER TABLE customers MODIFY COLUMN customers_default_address_id INTEGER; ALTER TABLE customers_basket MODIFY COLUMN final_price DECIMAL(15,4); Might be worth applying all the patches. Anyway hope this helps Need help installing add ons/contributions, cleaning a hacked site or a bespoke development, check my profile Virus Threat Scanner My Contributions Basic install answers. Click here for Contributions / Add Ons. UK your site. Site Move. Basic design info. For links mentioned in old answers that are no longer here follow this link Useful Threads. If this post was useful, click the Like This button over there ======>>>>>.
philzman Posted February 6, 2008 Author Posted February 6, 2008 Thanks for taking the time to paste me all that, but the lines I have to edit don't match. For example, in your post you said to replace this line : $from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id) left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c"; if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) { if (!tep_session_is_registered('customer_country_id')) { $customer_country_id = STORE_COUNTRY; $customer_zone_id = STORE_ZONE; } $from_str .= " left join " . TABLE_TAX_RATES . " tr on p.products_tax_class_id = tr.tax_class_id left join " . TABLE_ZONES_TO_GEO_ZONES . " gz on tr.tax_zone_id = gz.geo_zone_id and (gz.zone_country_id is null or gz.zone_country_id = '0' or gz.zone_country_id = '" . (int)$customer_country_id . "') and (gz.zone_id is null or gz.zone_id = '0' or gz.zone_id = '" . (int)$customer_zone_id . "')"; } $where_str = " where p.products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id "; But I went through the file and the line was several numbers lower and it was : $from_str = "from ((" . TABLE_PRODUCTS . " p) left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id), " . TABLE_PRODUCTS_DESCRIPTION . " pd) left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c"; if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) { if (!tep_session_is_registered('customer_country_id')) { $customer_country_id = STORE_COUNTRY; $customer_zone_id = STORE_ZONE; } $from_str .= " left join " . TABLE_TAX_RATES . " tr on p.products_tax_class_id = tr.tax_class_id left join " . TABLE_ZONES_TO_GEO_ZONES . " gz on tr.tax_zone_id = gz.geo_zone_id and (gz.zone_country_id is null or gz.zone_country_id = '0' or gz.zone_country_id = '" . (int)$customer_country_id . "') and (gz.zone_id is null or gz.zone_id = '0' or gz.zone_id = '" . (int)$customer_zone_id . "')"; } $where_str = " where p.products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id "; So I must have a different version. I'm running an older one cause I installed a template directly.
Ausgirl Posted February 6, 2008 Posted February 6, 2008 Thats why your code doesnt match, it is because its a template not because its a different version of osc. You still need to update as suggested in the previous post as much as you can and maybe THIS will help you.
philzman Posted February 6, 2008 Author Posted February 6, 2008 Nope, that didn't really help me, once I did it it messed up everything so I had to change it back.
Ausgirl Posted February 6, 2008 Posted February 6, 2008 Nope, that didn't really help me, once I did it it messed up everything so I had to change it back. Keep that tip handy as it may come in handy at a later date. If you havent already, you still need to update, As stated previously, you should of been provided with an "EXTRAS" folder, just have a look to see if you were provided with one as it should contain any necessary updates you need. Update Working with templates is not so easy as I myself am finding out. (your right it can be a bit frustrating :angry: )
philzman Posted February 6, 2008 Author Posted February 6, 2008 I don't have an extras folder, I don't know if I want to update right now given the fact that I already have two errors I can't fix, not really in the mood for more, besides updating and adapting the template will probably cause me even more problems. I hope I can just solve these two errors and be done with it.
Ausgirl Posted February 6, 2008 Posted February 6, 2008 To solve your problems you need to update. The errors wont go away unless you update. If you dont update your site will not be compatible and just simply will not work.
Guest Posted February 6, 2008 Posted February 6, 2008 Download and install the latest osc, and put in the parts of the template you want.
philzman Posted February 6, 2008 Author Posted February 6, 2008 And how do I do that without replacing most of the php files ? Won't that just mess everything up ? The template is for an older version of OSC.
Recommended Posts
Archived
This topic is now archived and is closed to further replies.