Bindparam pour un REPLACE dans une requête SQL

a marqué ce sujet comme résolu.

Bonjour,

J’ai un UPDATE :

1
UPDATE video SET title = :title, description = :description, file = REPLACE(file, :param__replace, ''), updated_at = :updated_at WHERE user = :user AND token = :token

Mon problème est simple. La requête ne me retourne pas d’erreur avec ->errorInfo(), mais ne modifie pas la ligne supposément affectée dans ma table.

Tandis que si je remplace ":param_replace" directement par sa valeur :

1
UPDATE video SET title = :title, description = :description, file = REPLACE(file, 'temp_', ''), updated_at = :updated_at WHERE user = :user AND token = :token

Là, ça fonctionne, le "temp_" disparait dans la colonne "file" sur la ligne que je veux.

Est-ce qu’il est impossible de mettre un ":param" dans une fonction SQL ?

Je vous remercie.

Lu,

il n’y a aucune raison que ça ne fonctionne pas. Es-tu sûr de ta condition ? De la valeur bindée en :param__replace ? (erreur de frappe d’ailleurs les 2 underscores ?)

vibrice

Oui, erreur de frappe ^^

La seule raison que je vois pourrait être le type "text" de ma colonne, est-ce ça ? Sinon, j’ai regardé et toutes les autres colonnes affectées par le SET sont bien modifiées.

De même, j’ai remplacé ’’ dans le replace par une valeur bindée faisant plus de 0 caractère, et ça ne fonctionne pas non plus.

+0 -0

La seule raison que je vois pourrait être le type "text" de ma colonne, est-ce ça ?

A moins de dépasser la limite de stockage du type text, ce qui vaudrait une erreur (quoi que ça doit dépendre du sql_mode et surtout du client - mysqlnd, aux dernières nouvelles ne détecte pas les troncations), non.

Il n’y a strictement aucune raison que ça ne fonctionne pas, encore moins avec l’émulation activée (comme c’est le cas par défaut).

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte