 <p>I guess that's pretty much PHP syntax question rather than PDO one.</p> <pre><code>$params = is_array($params) ? $params : array($params); </code></pre> <p>is a shortland (called <em>ternary operator</em>)) for </p> <pre><code>if (is_array($params)) { $params = $params; } else { $params = array($params); } </code></pre> <p>which I'd rather wrote as </p> <pre><code>if (!is_array($params)) $params = array($params); </code></pre> <p>which is pretty self-explanatory and can be read almost in plain English: </p> <blockquote> <p>if $params is not an array, let's make it array with one value of former $params</p> </blockquote> <p>That's why I hate ternary operator (and lambdas) and always avoid it's use. It makes pretty readable code into a mess. Just out of programmer's laziness.</p> <p>To answer your other questions,</p> <blockquote> <p>Does it meant that I don't have to prepare the query in this way anymore?</p> </blockquote> <p>Who said that? You're preparing it all right in your code, check it again.</p> <blockquote> <p>and forget about this binding?</p> </blockquote> <p>that's true. <code>execute($params)</code> is just another way to bind variables. </p>