{"id":23055109,"url":"https://github.com/walissonaguirra/php-data-object-pdo","last_synced_at":"2025-04-03T05:16:37.759Z","repository":{"id":248324106,"uuid":"828381522","full_name":"walissonaguirra/PHP-Data-Object-PDO","owner":"walissonaguirra","description":"Guia básico de utilização da class PDO do PHP com exemplos","archived":false,"fork":false,"pushed_at":"2024-07-14T19:21:01.000Z","size":38,"stargazers_count":1,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-08T19:15:08.496Z","etag":null,"topics":["pdo-php","php"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/walissonaguirra.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-14T01:12:04.000Z","updated_at":"2024-07-16T15:18:59.000Z","dependencies_parsed_at":"2024-07-14T02:40:41.409Z","dependency_job_id":"60cdd897-7ff2-49c6-aef7-3f7f437f9e31","html_url":"https://github.com/walissonaguirra/PHP-Data-Object-PDO","commit_stats":null,"previous_names":["walissonaguirra/php-data-object-pdo"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walissonaguirra%2FPHP-Data-Object-PDO","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walissonaguirra%2FPHP-Data-Object-PDO/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walissonaguirra%2FPHP-Data-Object-PDO/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walissonaguirra%2FPHP-Data-Object-PDO/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/walissonaguirra","download_url":"https://codeload.github.com/walissonaguirra/PHP-Data-Object-PDO/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246939231,"owners_count":20857922,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["pdo-php","php"],"created_at":"2024-12-16T01:10:33.143Z","updated_at":"2025-04-03T05:16:37.741Z","avatar_url":"https://github.com/walissonaguirra.png","language":null,"readme":"## PHP Data Object (PDO) \n\n![PHP](https://img.shields.io/badge/PHP-%5E8.2-blue)\n![License](https://img.shields.io/badge/Code%20GNU-License-blue.svg)\n![learning](https://img.shields.io/badge/PDO-learning-blue.svg)\n\nGuia básico de utilização da class PDO do PHP.\n\n\u003e _[PHP Data Objects](https://www.php.net/manual/pt_BR/intro.pdo.php). Trata-se de uma extensão do PHP para prover acesso a diferentes modelos de bancos de dados através de uma interface única de classes e métodos._\n\n### Conexão com o banco de dados\n\n\n#### Método 1: Embutido\n```php\n$pdo = new PDO('mysql:host=127.0.0.1;dbname=database;charset=utf8mb4', 'username', 'password');\n$pdo-\u003esetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n```\n\n#### Método 2: Função\n```php\nfunction connect(): PDO\n{\n  try {\n\n    # MariaDB\n    $host    = '127.0.0.1';\n    $dbname  = 'database';\n    $user    = 'username';\n    $pass    = 'password';\n    $options = [\n        PDO::ATTR_ERRMODE =\u003e PDO::ERRMODE_EXCEPTION\n    ];\n\n    return new PDO(\"mysql:host=$host;dbname=$dbname;charset=utf8mb4\", $user, $pass);\n   \n    # SQLite Database\n    # return new PDO(\"sqlite:database.db\");\n\n  } catch(PDOException $e) {\n      echo \"Erro na conexão com banco de dados: \" . $e-\u003egetMessage();\n  }\n}\n```\n[_PDO Options_](https://www.php.net/manual/en/pdo.setattribute.php)\n`ATTR_ERRMODE` Lança exceções em erros.\n\n\n### Executando instrução SQL\nAs etapas para executar uma instrução SQL são:\n\n 1. **Connect** conexão com o banco de dados (ver ponto anterior)\n 2. **Prepare** prepara uma instrução\n 3. **Execute** executar a instrução (associando parâmetros se necessário)\n 4. Opcional: processe o resultado da instrução executada.\n\n### Preparando uma instrução\nPodemos preparar a instrução para ser executada de forma simples \n```php\n$stmt = $pdo-\u003eprepare(\"SELECT name, name_social FROM students\");\n```\n\nSe precisarmos incluir parâmetros na instrução, podemos usar a sintaxe `:name`\n```php\n$stmt = $pdo-\u003eprepare(\"SELECT name, name_social FROM students WHERE age \u003e :age\");\n```\n\nDa mesma forma que preparamos uma consulta do tipo `SELECT`, também podemos preparar uma consulta `INSERT`, `UPDATE`, etc.\n```php\n$stmt = $pdo-\u003eprepare(\"INSERT INTO students(name, name_social) values (:name, :name_social)\");\n```\n\n### Executar á instrução\nPara executar uma instrução simples que não requer parâmetros, podemos invocar diretamente o método `execute()`.\n```php\n$stmt = $pdo-\u003eprepare(\"SELECT name, name_social FROM students\");\n$stmt-\u003eexecute();\n```\nSe precisarmos incluir parâmetros na instrução, passaremos as informações em um array associativo para o método `execute()`:\n```php\n$data = [ ':name' =\u003e 'Walisson Aguirra', ':age' =\u003e 24 ];\n$stmt = $pdo-\u003eprepare(\"SELECT name, name_social FROM students WHERE name = :name AND age = :age\");\n$stmt-\u003eexecute($data);\n```\nDa mesma forma que preparamos uma consulta do tipo `SELECT`, também podemos preparar uma consulta `INSERT`, `UPDATE`, etc.\n```php\n$data = [ ':name' =\u003e 'Walisson Aguirra', ':age' =\u003e 24 ];\n$stmt = $pdo-\u003eprepare(\"INSERT INTO students(name, age) values (:name, :age)\");\n$stmt-\u003eexecute($data);\n```\n\n### Processar os resultados de uma consulta SELECT\n\nUma vez executado o metodo `execute()`, podemos acessar os resultados obtidos do banco de dados. O PDO nos oferece a possibilidade de receber os resultados em diversos formatos: objetos de uma classe, arrays associativos, etc. Para dizer como queremos coletar os resultados, usaremos o método `setFetchMode(String mode)`.\n\nEstes são os 3 valores mais utilizados que nos ajudarão a cobrir praticamente todas as nossas necessidades:\n\n - **PDO::FETCH_ASSOC:** retorna um array onde os índices serão os nomes das colunas.\n - **PDO::FETCH_CLASS:** Atribui os valores das colunas às propriedades da classe. Criar novas propriedades caso não existam para as colunas.\n - **PDO::FETCH_OBJ:** Retorna objetos anônimos com propriedades que correspondem aos nomes das colunas.\n\nDepois de definirmos como queremos os dados, usaremos o método `fetch()` para acessar as informações. O método `fetch()` busca a próxima linha de um conjunto de resultados, para que possamos iterar pelos resultados conforme mostrado nos exemplos a seguir:\n\n**FETCH ASSOC:**\n```php\n// Este tipo de busca cria um array associativo, indexado pelo nome da coluna.\n$data = array( 'name' =\u003e 'Walisson Aguirra', 'age' =\u003e 24 );\n$stmt = $pdo-\u003eprepare(\"SELECT name, name_social, age FROM students WHERE name = :name AND age = :age\");\n\n// Definimos a forma como queremos receber os dados\n$stmt-\u003esetFetchMode(PDO::FETCH_ASSOC);\n\n// Executamos a instrução sql\n$stmt-\u003eexecute($data);\n\n// Mostramos os resultados obtidos\nwhile($row = $stmt-\u003efetch()) {\n    echo $row['name'] . PHP_EOL;\n    echo $row['name_social'] . PHP_EOL;\n    echo $row['age'] . PHP_EOL;\n}\n```\n\n**FETCH OBJ:**\n```php\n// Este método cria um objeto para cada linha obtida do banco de dados.\n$data = array( 'name' =\u003e 'Walisson Aguirra', 'age' =\u003e 24 );\n$stmt = $pdo-\u003eprepare(\"SELECT name, name_social, age FROM students WHERE name = :name AND age = :age\");\n\n// Definimos a forma como queremos receber os dados\n$stmt-\u003esetFetchMode(PDO::FETCH_OBJ);\n\n// Executamos a instrução sql\n$stmt-\u003eexecute($data);\n\n// Mostramos os resultados obtidos\nwhile($row = $stmt-\u003efetch()) {\n    echo $row-\u003ename . PHP_EOL;\n    echo $row-\u003ename_social . PHP_EOL;\n    echo $row-\u003eage . PHP_EOL;\n}\n\n```\n\n**FETCH CLASS:**\n```php\n// Este método retorna os dados como objeto da class que indicamos.\n// As propriedades do objeto serão inicializadas com dados do banco de dados antes de chamar o construtor.\n\n// Se houver nomes de colunas que não possuem uma propriedade na class, elas serão criadas como propriedades de tipo público\n\n// As modificações desses dados podem ser feito no construtor da class.\n\nclass Student {\n    public $name;\n    public $name_social;\n    public $age;\n    public $otherInformation;\n\n    function __construct($otherInformation = '') {\n        // O construtor será executado após associar os valores obtidos do banco de dados ao objeto. Portanto, podemos tratar esses valores dentro do construtor.\n\t$this-\u003ename = strtoupper($this-\u003ename);\n        $this-\u003eotherInformation = $otherInformation;\n    }\n}\n\n$data = [ 'name' =\u003e 'Walisson Aguirra', 'age' =\u003e 24 ];\n$stmt = $pdo-\u003eprepare(\"SELECT name, name_social FROM students WHERE name = :name AND age = :age\");\n\n// Definimos a forma como queremos receber os dados\n$stmt-\u003esetFetchMode(PDO::FETCH_CLASS, 'Student');\n\n// Executamos a instrução sql\n$stmt-\u003eexecute($data);\n\n// Mostramos os resultados obtidos\nwhile($obj = $stmt-\u003efetch()) {\n    echo $obj-\u003ename;\n}\n```\n\n### Método abreviado query()\nEm consultas que não recebem parâmetros, podemos utilizar o método de atalho `query()` que executará a instrução e retornará o conjunto de resultados diretamente. Ou seja, não é necessário fazer a operação em 2 passo (`prepare()` e `execute()`) como fizemos até agora.\n\n```php\n$stmt = $pdo-\u003equery('SELECT name, name_social, age from students');\n\n// Definimos a forma como queremos receber os dados\n$stmt-\u003esetFetchMode(PDO::FETCH_ASSOC);\n\nwhile($row = $stmt-\u003efetch()) {\n    echo $row['name'] . PHP_EOL;\n    echo $row['name_social'] . PHP_EOL;\n    echo $row['age'] . PHP_EOL;\n}\n```\nPor razões de segurança (evite [injeção de SQL](https://pt.wikipedia.org/wiki/Inje%C3%A7%C3%A3o_de_SQL)) é aconselhável evitar o método `query()` quando a instrução inclui valores de variáveis. Por razões de desempenho também é recomendado usar `prepare()` e `execute()` em instruções que serão executadas múltiplas vezes.\n\n### Método fetchObject()\nExiste uma alternativa ao método `fetch()` que retornará os resultados como objetos anônimos (**`PDO::FETCH_OBJ`**) ou objetos da classe indicada (**`PDO::FETCH_CLASS`**) . Este método é chamado `fetchObject()`.\n\n```php\n$stmt = $pdo-\u003equery('SELECT name, name_social, age from students');\n\nwhile($student = $stmt-\u003efetchObject()) {\n    echo $student-\u003ename;\n    echo $student-\u003ename_social;\n}\n```\n\nSe quisermos que os objetos pertençam a uma classe específica, podemos passa como paramento na chamada do método:\n```php\n$stmt = $pdo-\u003equery('SELECT name, name_social, age from students');\n\nwhile($student = $stmt -\u003efetchObject('Studant')) {\n    echo $student-\u003ename;\n    echo $student-\u003ename_social;\n}\n```\n\n### Obter todos os resultados com o método fetchAll()\nAo contrário do método `fetch()`, `fetchAll()` traz todos os dados de uma vez, sem abrir nenhum ponteiro, armazenando-os em um array. É recomendado quando você não espera muitos resultados que possam causar problemas de memória, quando você deseja salvar milhares de linhas de um SELECT em um array de uma só vez.\n```php\n// Neste caso $result será um array associativo com todos os dados do banco de dados\n$result = $stmt-\u003efetchAll(PDO::FETCH_ASSOC);\n\n// Para ler as linhas podemos percorrer o array e acessar as informações.\nforeach ($result as $row){\n    echo $row[\"name\"].\" \".$row[\"name_social\"] . PHP_EOL;\n}\n```\n\n### Licença\n\nEste projeto está licenciado sob a licença [GNU General Public License v3.0](https://github.com/walissonaguirra/fsphp/blob/main/LICENSE).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalissonaguirra%2Fphp-data-object-pdo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwalissonaguirra%2Fphp-data-object-pdo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalissonaguirra%2Fphp-data-object-pdo/lists"}