- Feature Articles
- CodeSOD
- Error'd
- Forums
-
Other Articles
- Random Article
- Other Series
- Alex's Soapbox
- Announcements
- Best of…
- Best of Email
- Best of the Sidebar
- Bring Your Own Code
- Coded Smorgasbord
- Mandatory Fun Day
- Off Topic
- Representative Line
- News Roundup
- Editor's Soapbox
- Software on the Rocks
- Souvenir Potpourri
- Sponsor Post
- Tales from the Interview
- The Daily WTF: Live
- Virtudyne
Admin
But did the code wrote by Nancy give the correct result like the original code?
Leaving the answer to this dangling is TRWTF.
Admin
Except PHP counts seconds from the epoch, not milliseconds.
It does have a DateTime class that can record microseconds, but that's not being used here. There are also the microtime function, but that oddly enough returns microseconds, not milliseconds, and the high-resolution timer, but that has nanosecond resolution.
So where this program is getting its millisecond-resolution timestamps from, it's not directly from PHP.
Admin
@Watson Milliseconds probably come from JavaScript...
Admin
And that's not even the worst part. Anyone notice the for day loop and that the SQL resides in it? In other words: get Monday, append to results. Wash, rinse, repeat.
Admin
So much bad. So much v4.0 bad.
array() instead of []. array_push() instead of $result[] =. What are the other $results good for? Variables called $mysomething - what are we, a Windows 95 desktop? get_row(), apparently, is WordPress rather than a superfluous home-brew; fair enough. And what's with the cockamamie indentation in the SQL statement?
So much bad...
Admin
You're arguing style, here. That's arguably worse than arguing semantics. There's nothing wrong with array(), and there's nothing wrong with array_push(). Hell, I have a customer still running 5.3, so [] is out of the question.
Admin
Every time they run an article on PHP it kind of reinforces the idea that there's no one on staff who's ever used it, because they never seem to know what they're talking about.
Remy: I never do more research about a topic than when we run a PHP article, because, no, I don't actually know PHP, and PHP's fractal badness always has new dimensions to understand. In this case, I just went by what the submitter said, so yeah, this is probably a case where they were getting timestamps from JS, but that wasn't clear from the submission.
Admin
Why is that SELECT statement scattered across the page... oh right, fucking 4-space hard tabs mixed with blanks. Because the hard tabs would never ever show as anything but 4 spaces wide! (Can you tell what side of that holy war I'm on?)
It's amazing how little WTF perpetrators seem to understand about basic math much less algebra. Maybe if they knew some real math we wouldn't see so much string math. String math is like using scissors (with rounded tips of course) and paste to do math, with a bonus that they can eat the paste too!
But TRNWTF is that they actually used YYYY-MM-DD dates. Two steps back, but one step forward! PROGRESS!
Admin
And the worst part isn't even that, it's that the author of the original code didn't even understand how prepared statements and parameter binding work. But hey, it looks like they were using an additional layer on top of PDO or the respective database driver. Maybe they did something smart in there?
Admin
Whenever you see code that looks like a square peg that someone who didn't understand has hammered into a round hole, you shouldn't think tutorial, you should assume that some outsourcer copypasta-ed from a random page on Stack Exchange.
Admin
The YYYY-MM-DD requirement would have been forced on them by MySQL, because you just know they're using MySQL (and that might even explain the "$mydb" wart), and they at least had the good grace to use a datetime field.
What's the betting that $day==86400000?
Admin
One, style very much is important, in a large enough code base. One array() may not be a disaster, but when you have myriads of lines of code all written in a mix of the style of 2012 and that of 2005, trust me, it gets a bother to read very quickly. Unless everything else is completely regular - which, in this case, it clearly isn't.
As for still using PHP 5.3 when 7.3 is already out and 5.6 has already been end-of-lifed, that's bad enough; but using that as an excuse for anything rather than as a reason to say "sorry", that's just fooling yourself.
Admin
The extra layer is WordPress. Which has many bad things, but at least it provides basic database handling which is slightly more convenient than bare PDO. (Not that it's needed here, but that's another matter - at least it doesn't hurt.)
Admin
So what makes [] inherently better than array()? The fact that it was copied from javascript?
Admin
Wow. So the ECMAScript languages (such as JavaScript and ActionScript) all store timestamps in milliseconds. Almost everywhere else stores them as seconds. In neither PHP, nor JavaScript, nor SQL are these datetimes though. A datetime in SQL is in the format
yyyy-mm-dd hh:ii:ss
. In PHP, it is represented by the DateTime class and in ECMAScript languages have a Date class. None of these represents adatetime
as an integer, float, or any other number.Admin
Well at least the guy managed to perform aggregation in his query. I once had to deal with an agonisingly slow end of month accounting routine which worked by selecting all the relevant records and summing the desired columns manually in a loop...
Admin
MySQL lets you use strings instead of timestamps and it will convert them internally following fairly standard format rules (so best if it's an ISO-formatted date string).
Would remove the need for all of this.
Admin
Somehow, I don't think you mean manually here.
Otherwise, you'd be talking about something like the situation I fixed right before getting my first real IT job. They had a program that would make a database query and generate a series of Excel spreadsheets. They sent each spreadsheet to a different secretary, to have them add up all of the numbers. A manager would then add the numbers each of the secretaries got together.
My fix was to just have the SQL query return a SUM rather than the individual results. It still generated a spreadsheet, because that's what they wanted. I suggested they could send it directly to the manager, but at least the one day I saw they used it, they still sent the spreadsheet off to one of those secretaries.
(For what it's worth, this didn't put anyone out of a job; they just had the secretaries do that job one day a month. They also had a backlog of secretarial work, due to, well, stupid crap like this.)