[spip-dev] sql_countsel : comportement normal ou bogue ?

Bonjour

En svn SPIP 1.9.3 dev SVN [11783]

je fais :
$pages = sql_countsel('spip_doc2img','id_document='.$id_document,'id_doc2img');

Que dois je avoir comme résultat si cette requête ne trouve aucun enregistrement

que ce soit $page > 0 ou isset($page) mon test est faux

si tu oublies le S à page, pas étonnant.

Committo,Ergo:Sum

Non c'est pas ça, j'ai merdé lors du copier/coller

mon dernier code :
        $pages =
sql_countsel('spip_doc2img','id_document='.$id_document,'id_doc2img');
        spip_log('pages :'.$pages,'doc2img');
        if ($pages) {
            spip_log("Document deja converti","doc2img");
            return false;
        }

et je suis incapable de savoir ce que retourne sql_countsel s'il n'y a
pas de resultat
le spip_log va retourner -> pages :
et pourtant le test va etre vrai

meme pb avec un is_numeric ou >0

Il y a peut-etre un pb avec count(distinct ..) sur ta version de MysQL.
Trace spip_mysql_countsel

Committo,Ergo:Sum

S'lt

A priori sql_count n'est pas en cause dans mon pb. Après avoir revu
mon script et fait simplifier le test sur is_numeric($pages) tout
semble ok.

Le bogue est ailleurs. Comme je pense que c'est plus lié à l'appel des
filtres et des squelettes j'ai ouvert un nouveau fil.

Km

si tu donnes pas toutes les billes de ton probleme, on va pas pouvoir t'aider ...
Cédric

S'lt

2 remarques concernant spip_countsel()

Si il n'y a pas d'enregistrement
-* Mysql retourne NULL
-* Sqlite retourne 0

Peut etre que l'api pourrait faire un intval sur le return
http://trac.rezo.net/trac/spip/browser/spip/ecrire/req/mysql.php#L490

Mais là je sais pas trop où le mettre pour faire propre.

Si on fait un groupby sur la clef primaire, mysql ou sqlite ne
semblent pas apprécier le resultat

Il ne semble pas y avoir de sécurité sur la requete retourne plusieurs
enregistrement en raison d'une clause where non compléte.

Km

S'lt

2 remarques concernant spip_countsel()

Si il n'y a pas d'enregistrement
-* Mysql retourne NULL
-* Sqlite retourne 0

Peut etre que l'api pourrait faire un intval sur le return
http://trac.rezo.net/trac/spip/browser/spip/ecrire/req/mysql.php#L490

Mais là je sais pas trop où le mettre pour faire propre.

Corrigé par 11893. Mieux vaut le faire dans les fichiers req/*
car sinon on doit retester le paramètre $requeter.

Si on fait un groupby sur la clef primaire, mysql ou sqlite ne
semblent pas apprécier le resultat

Tu pourrais être plus précis ?

Il ne semble pas y avoir de sécurité sur la requete retourne plusieurs
enregistrement en raison d'une clause where non compléte.

Idem.

Committo,Ergo:Sum

S'lt

Corrigé par 11893. Mieux vaut le faire dans les fichiers req/*
car sinon on doit retester le paramètre $requeter.

Merci pour la correction :slight_smile:

> Si on fait un groupby sur la clef primaire, mysql ou sqlite ne
> semblent pas apprécier le resultat

> Il ne semble pas y avoir de sécurité sur la requete retourne plusieurs
> enregistrement en raison d'une clause where non compléte.

Tu pourrais être plus précis ?

Au début j'ai fait ceci en réfléchisant trop vite et mal :

$pages = sql_countsel('spip_doc2img','id_document='.$id_document,'id_doc2img');

Or id_doc2img est la clef de cette table.

Du coup si :
-* id_document n'existe pas alors on avait NULL (corrigé je pense par 11893)
-* id_document existe on aura autant de resultat que d'enregistrements
-** avec mysql je recupérais malgré tout au moins un 1.
-** avec sqlite3, ça semble aller
-** avec sqlite2, ça semble ne pas le faire (pb avec DISTINCT)

Je suppose que ça retourne le premier résultat or on devrait je plutot
un erreur je pense.

Km