Não sou muito bom com explicações bru, mas só vejo que não há resposta depois de muito tempo. Eu criei uma classe básica para você inserir valores usando o PDO, espero que te aponte a direção correta, também compartilharei alguns links úteis para você.
Primeiro a conexão.
Eu posso ver que você já fez a conexão em sua classe, mas abaixo está a melhor conexão pdo adequada.
$host = '127.0.0.1';
$db = 'YourDatabase';
$user = 'YourDBUser';
$pass = 'YourDBPass';
$charset = 'utf8';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$dbh = new PDO($dsn, $user, $pass, $opt);
é assim que você configura a conexão PDO adequada. dns significa nome da fonte de dados Referência do https://phpdelusions.net/pdo#dsn acima esse cara explica melhor. tudo o que você precisa saber.
Agora, como você coloca essa conexão toda junto com sua classe?
bem vou criar um arquivo collect pdoClass.php e trabalhar a partir dessa classe.
<?php
class Connection
{
private $host = "127.0.0.1";
private $dbName = "YourDB";
private $user = "YourUser";
private $pass = "YourPass";
private $charset = 'utf8';
private $dbh;
private $error;
private $stmt;
//connection
public function __construct()
{
$dsn = "mysql:host=" . $this->host . ";dbname=" . $this->dbName . ";charset=" . $this->charset;
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false
);
try {
// setup connection
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
//catch any errors
catch (PDOException $e) {
$this->error = $e->getMessage();
}
}
//prepare statement
public function insertUserValues($query)
{
$this->stmt = $this->dbh->prepare($query);
}
//bind values
public function bind($param, $value, $type = null)
{
if (is_null($type)) {
switch (true) {
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
//actual value binding
$this->stmt->bindValue($param, $value, $type);
}
//execute statement
public function run()
{
return $this->stmt->execute();
}
}
?>
basicamente isso é tudo que você precisa para configurar o banco de dados e a função para inserir no seu db, tentei comentar algumas seções.
Agora, para usar esta classe, crie index.php ou o que você quiser. então inclua a classe
<?php
include'pdoClass.php';
$users = new Connection();
$users->insertUserValues('INSERT INTO test (name, age, description) VALUES(?,?,?)');
$users->bind(1, 'User'); //bind each value
$users->bind(2, 391); // bind
$users->bind(3, 'This is a value');
if($database->run()){
echo "record inserted";
}
?>
Feito, se você tiver alguma dúvida ou quiser que eu explique qualquer coisa, sinta-se à vontade para comentar abaixo que farei o possível para ajudá-lo.
Editar: se você precisar buscar os resultados, você também pode fazer uma nova função na classe,
Linha única:
public function SingleRow(){
$this->run();
return $this->stmt->fetch();
}
veja que usamos
fetch();
para buscar apenas uma linha. a maioria das pessoas ao buscar resultados irá buscá-los assim fetch(PDO::FETCH_ASSOC)
mas como fizemos uma conexão adequada e definimos nosso modo de busca padrão na conexão, não precisamos de tudo, podemos apenas usar fetch()
; para exibir esses resultados em seu arquivo index.php, é assim que você fará:
$users->insertUserValues("SELECT name, age, description FROM test WHERE name = :name");
$users->bind(':name','joe');
$row = $users->SingleRow();
echo '<pre>';
print_r($row);
echo '</pre>';
'; isso exibirá o resultado de joe como uma matriz.
para obter todos os resultados do nosso banco de dados
fazemos outra função para exibir todos os resultados.
public function All(){
$this->run();
return $this->stmt->fetchall();
}
Você vê a diferença agora que usamos
fetchall()
porque queremos todos os resultados. $users->insertUserValues("SELECT * FROM test");
$row = $users->All();
echo '<pre>';
print_r($row);
echo '</pre>';
';