PHP PDO: может ли мой PHP быть чище / эффективнее? - PullRequest
0 голосов
/ 22 февраля 2012

Итак, я наконец решил обновить свой PHP на 2012 год, научившись использовать PHP PDO.Пока все идет хорошо, однако я не знаю, действительно ли то, что я делаю, является лучшим способом сделать это.

В этом примере я запрашиваю свою базу данных для отображения сообщений, которые пользователи имеютсделал, а затем отображает 2 комментария для каждого сообщения.Так что, в основном, я собираю свои посты, зацикливаю их, затем в этом цикле я запрашиваю в базе данных два верхних комментария для каждого поста.Однако, прежде чем я начал бегать и начать использовать это весь год, я подумал, что я посмотрю, есть ли более чистый способ сделать это.

Так что, если бы кто-нибудь мог уделить время, чтобы просмотреть этот небольшой блок кода идайте мне знать, если есть более чистый и, возможно, более эффективный способ сделать это, я действительно ценю это.Не стесняйтесь придираться!

<?php
$hostname = 'localhost';
$username = 'root';
$password = 'root';
$database = 'database';
try {
    $dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

//Get Posts
    $stmt = $dbh->prepare("SELECT * FROM posts");
    $stmt->execute();
    $result = $stmt->fetchAll();
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }

//Loop through each post
foreach($result as $row) {

echo $row['post'];

//Get comments for this post
    $pid = $row['id'];
    $stmt = $dbh->prepare("SELECT * FROM comments WHERE pid = :pid LIMIT 2");
    $stmt->bindParam(':pid', $pid, PDO::PARAM_STR);
    $stmt->execute();
    $c_result = $stmt->fetchAll();

//Loop through comments
foreach($c_result as $com) {

echo $com['comment'];

    }
}
//Close connection
$dbh = null;
?>

1 Ответ

3 голосов
/ 22 февраля 2012

Ну, это на самом деле 2 вопроса.

.1.Для кода , который вы используете, это довольно уродливо.Использование сырых API-функций всегда делает ваш код уродливым, скучным и повторяющимся.Чтобы выполнить только один запрос, вам понадобилось ПЯТЬ строк!
Не думаете ли вы, что лучше всего одна строка?Строка состоит только из значащих операторов?

$comments = $db->getAll("SELECT * FROM comments WHERE pid = :pid LIMIT 2",$row['id']);

.2.Для алгоритма - это вполне нормально.
Предполагая, что вы * не собираетесь перебирать всю вашу базу данных, а просто запрашиваете только 10-20 сообщений на страницу, дополнительные 10-20 первичные-key поиск на основе не сильно замедлит ваше приложение.

.3.Бонус-трек.
вещь, которую вы действительно можете рассмотреть, это «разделение бизнес-логики / логики представления».Почему бы не получить все ваши данные первыми и только после начала вывода?это сделает ваш код более чистым.

...