Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 Re : Migration » [Résolu] MySQL vers PgSQL, trouver un équivalent de bindValue » 16/06/2012 12:28:43
Ok c'est bon j'ai trouvé à cette adresse.
En fait en PDO il y a 2 manières de faire ce que je voulais faire: on utilise des paramètres comme :compteur, ou alors on utilise des "?" dans la requête, leurs positions étant numéroté. Ce qui donne ceci:
<?php
$query=$bdd->prepare('SELECT champ_x, champ_y FROM ma_table WHERE variable_x < ?');
$query->bindValue(1,$compteur,PDO::PARAM_INT);
$query->execute();
?>
Voilà c'était tout simple et ça fonctionne très bien, maintenant je saurai.
Merci pour vos réponses.
#2 Re : Migration » [Résolu] MySQL vers PgSQL, trouver un équivalent de bindValue » 16/06/2012 12:14:41
@Gleu: J'ai essayé le code que vous m'aviez proposé, en effet le :compteur n'est pas reconnu, mais le $1 oui, merci pour cette correction.
Pour contre le bindValue lui est toujours inconnu: Warning: PDOStatement::bindValue() [pdostatement.bindvalue]: SQLSTATE[HY093]: Invalid parameter number: :$1 in....
Cette erreur correspond à la ligne:
$query->bindValue('$1',$compteur,PDO::PARAM_INT);
La variable $compteur contient bien une donnée de type INT.
Je continue mes recherches...
#3 Re : Migration » [Résolu] MySQL vers PgSQL, trouver un équivalent de bindValue » 15/06/2012 20:31:08
En effet c'est ce que je croyais en choisissant PDO, mais au fait chaque SGBD utilise un dialecte différent de SQL. Les requêtes ne sont pas tout à fait identique entre MySQL et PgSQL, par exemple pour les jointures PgSQL rajoute un "OUTER" entre LEFT et JOIN, en MySQL il y a juste LEFT JOIN... (ce n'est qu'un exemple).
Ceci dit la façon d'exécuter le PDO reste la même.
J'ai essayé de faire fonctionner le premier code avec une base de données PgSQL cela n'a pas fonctionné (il fonctionne parfaitement avec MySQL):
j'obtiens l'erreur: Notice: Undefined variable: compteur in....
Alors "undefined" indique-t-il que PgSQL sait que :compteur est une variable, mais il ne voit nul part une définition qui lui serait associé?
Si je m'arrange pour qu'il n'y est plus cette erreur afin de savoir ce qu'il pense de bindvalue (je remplace :compteur par un nombre dans la première requête), j'obtiens ceci:
PDOStatement::bindValue() [pdostatement.bindvalue]: SQLSTATE[HY093]: Invalid parameter number: :compteur in....
Je ne vois toujours pas comment faire, vous voyez une solution?
@gleu: en tout cas merci pour la rapidité de la réponse.
#4 Migration » [Résolu] MySQL vers PgSQL, trouver un équivalent de bindValue » 15/06/2012 18:48:08
- Hello
- Réponses : 5
Bonjour à tous,
Voilà je débute en PDO et PgSQL, il y a un début à tout.
Voici un code php exécutant une requête sql, mais qui utilise MySQL:
<?php
$query=$bdd->prepare('SELECT champ_x, champ_y FROM ma_table WHERE variable_x < :compteur');
$query->bindValue(':compteur',$compteur,PDO::PARAM_INT);
$query->execute();
?>
Voilà mon but, ce que je n'arrive pas à faire, c'est de trouver l'équivalent pour PgSQL du paramètre :compteur, et de pouvoir lui assigner la valeur stocké dans $compteur.
La documentation en ligne montre bien l'utilisation de paramètres avec PREPARE mais les exemples ne sont pas adaptés pour de la PDO (du moins pour mon niveau).
J'avais essayé ceci mais ça ne fonctionne pas (même pas de message d'erreur, une page blanche) :
<?php
$compteur=10;
$query=$bdd->prepare('SELECT champ_x, champ_y FROM ma_table WHERE variable_x < $compteur');
$query->execute();
?>
Merci pour vos réponses.
Pages : 1