Mysql
 sql >> Baza danych >  >> RDS >> Mysql

skrócone zapytanie PDO

Masz odpowiedź na pytanie „Dlaczego otrzymuję ten błąd”, ale nie dostałeś odpowiedzi na „skrócone zapytanie PDO”.

Do tego będziemy potrzebować czegoś, co nazywa się „programowaniem”.

Ciekawą rzeczą w programowaniu jest to, że nie ograniczamy się do istniejących narzędzi, jak w przypadku innych zawodów. Dzięki programowaniu zawsze możemy stworzyć własne narzędzie, a następnie zacząć go używać zamiast całego zestawu starych narzędzi.

Programowanie zorientowane obiektowo jest w tym szczególnie dobre, ponieważ możemy wziąć istniejący obiekt i po prostu dodać kilka funkcji, pozostawiając resztę bez zmian.

Na przykład wyobraźmy sobie, że chcemy skrócić sposób uruchamiania przygotowanego zapytania w PDO. Wszystko, czego potrzebujemy, to rozszerzać obiekt PDO z nową metodą skróconą. Najtrudniejsze jest nadanie nowej metodzie nazwy.

Reszta jest prosta:wystarczy kilka linijek kodu

class MyPDO extends PDO
{
    public function run($sql, $bind = NULL)
    {
        $stmt = $this->prepare($sql);
        $stmt->execute($bind);
        return $stmt;
    }
}

To jest cały kod potrzebujesz. Możesz przechowywać go w tym samym pliku, w którym przechowujesz poświadczenia bazy danych. Pamiętaj, że to dodanie nie wpłynie na Twój istniejący kod w jakikolwiek sposób - pozostaje dokładnie taka sama i możesz nadal korzystać ze wszystkich istniejących funkcji PDO jak zwykle.

Teraz musisz zmienić tylko 2 litery w konstruktorze PDO, nazywając go

$conn = new MyPDO(...the rest is exactly the same...);

I od razu możesz zacząć korzystać z nowego, błyszczącego narzędzia:

$sql = "SELECT * FROM myTable WHERE id = :id";
$result = $conn->run($sql, ['id' => $id])->fetchAll(PDO::FETCH_ASSOC);

Lub trochę optymalizacji,

$result = $conn->run("SELECT * FROM myTable WHERE id = ?", [$id])->fetchAll();

ponieważ zawsze możesz ustawić domyślny tryb pobierania raz na zawsze, a dla pojedynczej zmiennej nie ma zastosowania nazwany symbol zastępczy. Co sprawia, że ​​ten kod jest prawdziwym skrótem w porównaniu z zaakceptowaną odpowiedzią,

$stmt_test = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$stmt_test->execute([$id]);
$result = $stmt_test->fetchAll(PDO::FETCH_ASSOC);

a nawet do najlepszej odpowiedzi, jaką masz do tej pory,

$result = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$result->execute([$id]);

nie wspominając o tym, że ten ostatni nie zawsze jest użyteczny, ponieważ nadaje się tylko do pobrania tablicy. Podczas gdy z prawdziwym skrócony dowolny format wyników jest możliwy:

$result = $conn->run($sql, [$id])->fetchAll(); // array
$result = $conn->run($sql, [$id])->fetch(); // single row
$result = $conn->run($sql, [$id])->fetchColumn(); // single value
$result = $conn->run($sql, [$id])->fetchAll(PDO::FETCH_*); // dozens of different formats


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jakie znaczenie ma nazwa indeksu podczas tworzenia indeksu w MySQL?

  2. Maksymalne rozmiary pamięci TINYTEXT, TEXT, MEDIUMTEXT i LONGTEXT

  3. Wielotabelowe zapytanie MySQL zwracające zbyt wiele wyników

  4. Zamień pierwszą literę każdego słowa na wielką literę w istniejącej tabeli

  5. php zawiera błąd nie znajduje ścieżki