Функция запроса PHP PDO - PullRequest
       1

Функция запроса PHP PDO

1 голос
/ 06 января 2011

РЕДАКТИРОВАТЬ:

Я отмечаю ответ ниже правильный из-за нашего разговора ниже.Не стесняйтесь оставить ответ на неотвеченные части, и я обязательно вернусь сюда.Спасибо.

= - = - = - = - = - = - = - = -

Я пытаюсь, чтобы одна функция обрабатывала все подготовленные операторы.В моем старом коде я выполнял 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
    }
}

1 Ответ

2 голосов
/ 06 января 2011

Не чувствуй себя слишком умным.

Составьте набор методов.

  • Общее из них - называемое query, которое возвращает тип ресурса.
  • Набор помощников, который с помощью этого метода запроса возвращает скалярное значение, строку, столбец и набор строк.
  • Служебные методы для получения количества затронутых строк, возвращаемых строк, вставки идентификатора и т.п. из данного ресурса.

Также метод для создания оператора SET был бы полезен для использования с методами вставки и обновления. См. этот для примера

Примеры:

//SELECT helpers:
$username = $db->getOne("SELECT name FROM users WHERE id=?",$id); //getting scalar
$userinfo = $db->getRow("SELECT * FROM users WHERE id=?",$id); //getting row
$newsdata = $db->getAll("SELECT * FROM news LIMIT ?,?",$start,$rows); //getting array

//Select for mass emailing
$res = $db->query("SELECT * FROM notify WHERE topic_id = ?",$topic);
$num = $db->numRows($res);
while ($row = $db->next()){
  mail(...);
}

//insert
$res = $db->query("INSERT INTO users SET name = ?",$name);
$id  = $db->lastId();

//delete
$res  = $db->query("DELETE FROM users WHERE id = ?",$id);
$rows = $db->affectedRows();

Тем не менее, я не уверен насчет методов disabledRows () и lastId, поскольку они принимают идентификатор ссылки в качестве параметра, а не идентификатор ресурса ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...