2011-11-04 4 views
2

Je n'ai pas réussi à le découvrir en affichant google. J'ai donc décidé de demander ici. La requête paramétrée est-elle supportée par postgre utilisant php pdo?postgresql ne supportant pas les requêtes paramétrables

Sinon. Comment puis-je atteindre la même sécurité? Notez que la sécurité, donc l'injection prouve est un must absolu. Utiliser une autre base de données n'est pas une option en tant que sidenote.

En réponse à Fonini;

requêtes paramétrées comme ceci:

 $st = $db->prepare(
     "insert into vendors set 
     first_name = :first_name, 
     last_name = :last_name" 
    ); 
    $st->execute(array(
     ':first_name' => $vendor->first_name, 
     ':last_name' => $vendor->last_name 
    )); 

n'utilisant bindParam

n'insère pas pour moi.

Mon code ressemble à ceci:

$project = new Project(); 
$project->id = 'sequence string'; 
$project->projectName = 'A project name'; 

$project->saveProject(); 

et dans le modèle de projet:

public function saveProject() { 
    $this->_db->query("INSERT INTO projects VALUES (:id,:projectName)", array(':id' => $this->_projectFields['id'], ':projectName' => $this->_projectFields['projectName']))->save(); 

}

la méthode d'interrogation dans ma classe db met la requête dans le _query privé $ champ, et le paramètre aray dans le champ $ _parameters privé. J'appelle ensuite la méthode save, qui prépare l'instruction, en donnant $ this -> _ query comme paramètre à PDO :: prepare(), puis appelle PDO :: execute en donnant les paramètres $ this -> _ en paramètre. Cela ne permet pas d'insérer

+1

Pourquoi pas? Je ne connais pas PDO, mais PostgreSQL supporte les requêtes paramétrées en JDBC et ODBC. –

+0

Parce que si j'utilise des requêtes non paramétrées, il insère des données, et uaing paramétré, il doesnt. En utilisant exactement les mêmes données. J'ai validé cela avec print r et echos. –

+1

Montrez votre code. Le problème est de votre côté, pas de PostgreSQL. –

Répondre

5

Oui, les requêtes paramétrées fonctionnent parfaitement avec PHP PDO.

$db = new PDO('pgsql:host=localhost;dbname=cars', 'user', 'password'); 

$cars = $db->prepare('SELECT * FROM cars WHERE id = :id'); 
$cars->bindParam(':id', $id = 20, PDO::PARAM_INT); 
$cars->execute(); 

$result = $cars->fetch(); 
echo 'Name: ' . $result['name']; 
+0

voir ma question éditée –

+0

Avez-vous des erreurs ou n'insère-t-il pas des données? La méthode save() n'existe pas. – fonini

+0

La méthode save existe dans ma classe de base de données. Je l'ai créé.J'appelle d'abord la méthode query dans ma classe dbhelper, qui définit certaines variables, puis save(), pour sauvegarder ces données. Je ne reçois pas d'erreurs, le flux d'applications fonctionne comme prévu. Il n'introduit tout simplement pas les données. Si vous lisez mon article publié, je pense et j'espère que cela deviendra plus clair. –

2

Il existe plusieurs façons de transmettre des valeurs au lieu de créer une instruction SQL avec la représentation textuelle des valeurs.

Prepared statements sont très probablement ce que vous en pensez.

Vous pouvez également create functions ("procédures stockées") et entrer des valeurs en tant que paramètres.

Voici un related answer à une question connexe

+0

Belle trouvaille, et merci pour les liens. Je comprends votre idée, mais je préfère utiliser mon code de question édité. +1 pour les liens si –

Questions connexes