Você deveria estar usando assim
<?php
$dbhost = 'localhost';
$dbname = 'pdo';
$dbusername = 'root';
$dbpassword = '845625';
$link = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbusername, $dbpassword);
$statement = $link->prepare('INSERT INTO testtable (name, lastname, age)
VALUES (:fname, :sname, :age)');
$statement->execute([
'fname' => 'Bob',
'sname' => 'Desaunois',
'age' => '18',
]);
As instruções preparadas são usadas para limpar sua entrada e, para fazer isso, você pode usar
:foo
sem quaisquer aspas simples no SQL para vincular variáveis e, em seguida, no execute()
função que você passa em um array associativo das variáveis que você definiu na instrução SQL. Você também pode usar
?
em vez de :foo
e, em seguida, passe em uma matriz apenas os valores para entrada assim; $statement = $link->prepare('INSERT INTO testtable (name, lastname, age)
VALUES (?, ?, ?)');
$statement->execute(['Bob', 'Desaunois', '18']);
Ambas as formas têm suas vantagens e desvantagens. Pessoalmente, prefiro vincular os nomes dos parâmetros, pois é mais fácil para mim ler.