Hand-rolled password storage gets the same three things wrong every time: a hash designed to be fast, a salt in its own column that is reused or truncated,…
A relation read inside a loop issues a query per iteration. Fifty orders rendered with the customer name attached is fifty-one queries, and nothing on the page says…
A site built as products.php, basket.php and checkout.php carries the same fifteen lines at the top of every file: session start, config include, database connection, a login check.…
BuddyPress extended profile fields look like user meta and are not. They live in their own tables — bp_xprofile_fields for the definitions, bp_xprofile_data for one row per field…
CodeIgniter 2 predates Composer and has no hook for a third-party autoloader: its loader looks for a file named after the class, in one of two directories, with…
WooCommerce 2.0 moved order line items out of a serialised _order_items post meta value and into two dedicated tables. Anything that read that key directly — a sales…