РЕДАКТИРОВАТЬ:
Я отмечаю ответ ниже правильный из-за нашего разговора ниже.Не стесняйтесь оставить ответ на неотвеченные части, и я обязательно вернусь сюда.Спасибо.
= - = - = - = - = - = - = - = -
Я пытаюсь, чтобы одна функция обрабатывала все подготовленные операторы.В моем старом коде я выполнял mysql_fetch_associng через запросы на выборку.Я хотел бы просто вернуть массив, если я делаю select и, возможно, lastInsertId или disabledRows или что-то еще, если я делаю Вставить обновление или Удалить.
Мой вопрос, кроме анализа SQL для'select' или 'insert' или добавление в функцию другого параметра, такого как $ type = 'Select', есть ли в классе PDO что-то, что позволяет узнать, есть ли данные?
Я видел где-то, что вы можете проверить, еслизначение, возвращаемое fetch или fetchAll, равно true.Это то, что я должен делать?
Я тоже открыт для любых отзывов о функции.
function pdo_query($sql,$data)
{
$stmt = $dbh->prepare($sql);
$first_row = true;
if(is_array($data)){
foreach($data as $row){
if(is_array($row)){
foreach($row as $param => $value){
if($first_row){
//http://bugs.php.net/43130 parameters can't have dashes
$stmt->bindParam($param, ${substr(str_replace('-','_',$param),1)});
}
${substr(str_replace('-','_',$param),1)} = $value;
}
$stmt->execute();
$first_row = false;
}
}
while ($row = $stmt->fetch()) {
$return[] = $row;
}
}
return $return;
}
Редактировать: я еще не пробовал, ноЕсть ли проблемы с тестированием для $ stmnt-> fetch ()?Кроме того, если я хочу автоматизировать получение lastInsertId () или затронутых строк, не похоже, что я могу понять, какой тип запроса я делаю после факта.Вот где я нахожусь:
if ($rows = $stmt->fetchAll()) {
return $rows;
} else if (some_way_of_determining_if_an_insert_happened) {
return $dbh->lastInsertId();
} else {
return some_way_of_returning_affected_rows
}
}