Larry Ullman, PHP6 and MySQL5 for Dynamic Websites (Peachpit Press, 2005)
I finished this a while back (April 15, 2011; I'm writing this on August 4), and at the time I was pretty high on it. I do think that, given a certain person at a certain point in his or her development, it's an incredibly valuable tome, but the more I think about it, and the more I try to mesh the code Ullman presents here with general OO coding practices (specifically encapsulation), the more vertical-market it seems to me.
The vertical market in question: PHP beginners. And I mean raw-off-the-vine recruits who have not only never touched PHP, but are new to the entire concept of object-oriented programming. And if that's you, I can't recommend this book highly enough; it will get you up and running quicker than you can say Jack Sprat (or maybe that should be Jackrabbit Sprat), as long as you're not going to try and do anything needlessly complex. Ullman illustrates a number of concepts here, and as long as you're not a neat-freak when it comes to your code, and as long as you listen to his periodic warnings that the code in the book isn't optimized (and has the odd security hole or two; do a google search on “php security” and implement a few of the things you find before releasing any of this code into the wild), you'll learn a number of core concepts about data modeling, presentation, validation, and that sort of thing, and you'll learn them well; PHP6 and MySQL5 for Dynamic Websites was the first of the PHP books I read that explained some of those concepts in ways that actually made sense to me, as a coder coming from a C++/C# background.
That said, there are more than enough PHP geeks out there who would take one look at the code in this book and recoil in horror at the idea that the validation and presentation code are housed in the same file. And given my background, I can't really say they're wrong. Making a long, long story as short as possible, the end result of all that mulling is that, while I think you should pick this up if you're a beginner, I don't think you should pick it up by itself; read it first, and then immediately progress to something like Lea's PHP MySQL Website Programming: Problem – Design – Solution to get (slightly) more advanced ideas on what your code should look like, in the greater scheme of things. *** ½