fetchAll вспомогательная функция с использованием PDO

Предположим, что у меня есть функция

function fetchAll(){ $args = func_get_args(); $query = array_shift($args); $query = str_replace("%s","'%s'",$query); foreach ($args as $key => $val) { $args[$key] = mysql_real_escape_string($val); } $query = vsprintf($query, $args); if (!$query) return FALSE; $res = mysql_query($query); if (!$res) { trigger_error("db: ".mysql_error()." in ".$query); return FALSE; } $a = array(); while($row = mysql_fetch_assoc($res)) $a[]=$row; return $a; } 

а затем использовать его так

 $a=$db->fetchAll("SELECT * FROM users WHERE status=%s LIMIT %d,%d",$status,$start,$num); 

Как я могу переписать его с помощью PDO?
Каждый пример, который я могу найти, показывает только, как напрямую привязывать параметры. Должен ли я передавать тип переменной, а также его ценность? Или сделать этот вызов всегда 4 строки – 3 привязки и выполнить?

изменить: как указал полковник, очевидно, что это (уже не?) работает с предложениями LIMIT .


Если вы используете простые запросы / не беспокоитесь о типе:

 function fetchAll(){ $args = func_get_args(); $query = array_shift($args);//'SELECT * FROM users WHERE status=? LIMIT ?,?' //you'll need a reference to your PDO instance $pdo somewhere.... $stmt = $pdo->prepare($query); $stmt->execute($args); return $stmt->fetchAll(); } 

Каждый пример, который я могу найти, показывает только, как напрямую привязывать параметры. Должен ли я передавать тип переменной, а также его ценность? Или сделать этот вызов всегда 4 строки – 3 привязки и выполнить?

Вам не нужно запускать привязку по одной линии за раз; вы можете связать с массивом следующим образом:

 # the data we want to insert $data = array('Cathy', '9 Dark and Twisty Road', 'Cardiff'); $STH = $DBH->("INSERT INTO folks (name, addr, city) values (?, ?, ?)"); $STH->execute($data);