[RESOLU] PDO - execute avec nombre de critères variables.

Mammouth du PHP | 1339 Messages

04 juin 2014, 23:43

Hello,

Comment simplifié cette requete qui ne marche pas de toute facon :
		$sql = "SELECT * FROM `tbl_fichier`";
	$sql .= !empty($_POST['du']) && !empty($_POST['au']) ? " WHERE `date` >= UNIX_TIMESTAMP(:du) AND `date` <= UNIX_TIMESTAMP(:au)" : NULL;
	$sql .= " ORDER BY `date` DESC LIMIT 0, :nb";
	$req = $connexion->prepare($sql);
	$execute['nb'] = $_POST['nb'];
	if(!empty($_POST['du']) && !empty($_POST['au'])) { $execute['du'] = $_POST['du']; $execute['au'] = $_POST['au']; }
	$req->execute($execute);
	while($row = $req->fetch(PDO::FETCH_ASSOC)) {
}
Je me prend un peu la tête a remettre tout mon site a jour.
Ca sera plus facile sur mon prochain projet mais là j'ai pas les bases par rapport a mes habitutes.
Bon sinon tu me fais un message privé et on se fait un TeamViewer

ViPHP
xTG
ViPHP | 7331 Messages

05 juin 2014, 08:03

Quelle est l'erreur PDO retournée ?
Sinon j'aurai préféré une chaîne vide plutôt que NULL.

Mammouth du PHP | 1339 Messages

05 juin 2014, 18:40

Ca ne retourne pas d'erreur mais ca ne retourne pas non plus de resultat ...
Comment si :nb était égal à 0.
Je me sers de querystring pour afficher la requete mais me l'affiche avec :nb et non pas le chiffre remplacé ...
Bon sinon tu me fais un message privé et on se fait un TeamViewer

ViPHP
xTG
ViPHP | 7331 Messages

05 juin 2014, 19:09

Que donnes un :
var_dump($execute);

Mammouth du PHP | 1339 Messages

05 juin 2014, 19:24

Code : Tout sélectionner

print_r($execute); Array ( [nb] => 20 ) var_dump($execute); array (size=1) 'nb' => int 20
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''20'' at line 1

Je comprend pas pourquoi il me met des " autour du 20.
Surtout si le var_dump retourne bien que c'est un int.
J'ai tester avec intval sur la variable mais c'est pareil.

En faisant ça, ça fonctionne mais je veux avoir un tableau classique moi :/
$req->bindValue('nb', $_POST['nb'], PDO::PARAM_INT);
Bon sinon tu me fais un message privé et on se fait un TeamViewer

ViPHP
xTG
ViPHP | 7331 Messages

05 juin 2014, 21:06

Il est possible que de base tout paramètre soit traité comme étant une chaîne de caractère.
Or avec PDO il rajoute automatiquement les quotes.
Sauf que MySQL n'accepte pas de chaînes de caractères dans le LIMIT.

Tu peux par contre tout à fait monter une boucle pour traiter des bind et forcer le type int pour la clé nb.
Pour inspiration : http://fr2.php.net/manual/fr/pdostateme ... php#104939