Tu ne peux passer un nom de colonne en paramètre, il va le considérer comme une chaine.
L'équivalent SQL de ta requête en l'état serait ceci (note les quotes)
SELECT * FROM entreprise WHERE 'nom_entreprise' = 'Capgemini' ORDER BY 'nom_entreprise'
C'est le order by qui provoque l'erreur, mais même sans tu n'obtiendras jamais de réponse.
Seules les valeurs peuvent être passés en paramètre, tout le reste doit être inséré à la main dans la requête. Tu peux éventuellement utiliser sprintf si tu veux rendre la chaine variable :
1 2 3 4 5 6 7 8 9 10
| $crit = 'nom_entreprise';
$value = 'Capgemini';
$sql = sprintf( 'SELECT * FROM entreprise WHERE %1$s = :value ORDER BY %1$s', $crit);
$req = oci_parse($db,$sql);
oci_bind_by_name($req, ":value",$value );
oci_execute($req);
while ($row = oci_fetch_array($req, OCI_ASSOC+OCI_RETURN_NULLS))
{
$entreprise[] = new Entreprise($row);
} |
A noter que si $crit vient de l'extérieur (par exemple d'un formulaire), il est recommandé de mettre une sécurité pour éviter d'insérer n'importe quoi, par exemple, en comparant la valeur à une liste de valeurs autorisées.
Partager