Uma injeção de SQL se comporta assim:
"SELECT * FROM character WHERE id = " . $id;
Dai na id você pega direto via get, mas ali o cara põe: 1; SELECT * FROM Memb_INFO;
ai sua query executa e traz o personagem que pediu e ainda traz todas as contas :v (exemplo bem rústico)
Código PHP:
$id = $_GET['id'];//isto é errado, mas to sitando como exemplo. Sempre tem que tratar algo vindo do get ou post.
$sth = $dbh->prepare('SELECT * FROM character WHERE id = :identi');
$sth->bindParam(':identi', $id , PDO::PARAM_INT);
//ai se de repente você quer pegar o login de uma pessoa:
$login = $_GET['login'];
$sth = $dbh->prepare('SELECT * FROM tabela_login WHERE login = :login');
$sth->bindParam(':login', $login , PDO::PARAM_STR, 12);//Limit de caracteres é o mais rápido a se fazer e simples.
//e por fim executa;
$sth->execute();
Você pode fazer uma classe que cuida das coisas pra você e estende do PDO, ou simplesmente usa algo já feito(recomendo o Doctrine).
Da uma lida sobre binds, e passa na minha assinatura, tem uma ótima fonte de conhecimento lá.
Vamos citar o exemplo do doctrine, você com ele não precisa nem execultar statements, ele usa classes e objetos para isto, ele mesmo sabe através de uma classe modelada, o que vai executar e o que vai trazer.
Código PHP:
<?php
// src/Product.php
/**
* @Entity @Table(name="products")
**/
class Product
{
/** @Id @Column(type="integer") @GeneratedValue **/
protected $id;
/** @Column(type="string") **/
protected $name;
// .. (other code)
}
// pega assim:
<?php
// show_product.php <id>
require_once "bootstrap.php";
$id = $argv[1];
$product = $entityManager->find('Product', $id);
if ($product === null) {
echo "No product found.\n";
exit(1);
}
echo sprintf("-%s\n", $product->getName());
O nome disso é Object Relational Mapper(ORM), e o Doctrine usa (Doctrine ORM).

Postado originalmente por
kind22
Eu vou te dar um simple motivo pra nao utilizar php 5.5, nao existe plugim oficial pra sql.
Cuidado ao se referenciar, sql engloba: MySql, MsSql(etc)... Sql é uma linguagem, logo vai longe, e existe driver oficial, como é o caso do "PDO_SQLSRV" para MSSQL server.