Quelle valeur devrais-je retourner dans le bas de ma fonction "insertImage" ?

Eléphant du PHP | 137 Messages

19 juin 2022, 15:08

Bonjour.

J'essaie d'utiliser la fonction de l'API asynchronous executeAsync du driver Cassandra-PHP-Datastax dont la démonstration est sur le lien suivant: https://github.com/datastax/php-driver/ ... r/features.

Voici donc, ce que j'ai produit comme code:

Code : Tout sélectionner

function insertImage($url, $src, $alt, $title, $description, $keywords, $htmlContentToTxt, $urlClicked, $urlBroken, $lang, $width, $height, $type, $imageExtension, $attr, $providerName, $cmsUsed, $authorName, $authorUrl, $publishedTime, $centroidScore, $graphBasedScore, $scrapeScore, $centroidWeightedScore, $crawledDate) { global $con; //création de la column Image $con->execute("CREATE TABLE IF NOT EXISTS images(siteUrl varchar PRIMARY KEY, imageUrl varchar, alt varchar, title varchar, description varchar, keywords varchar, textFromWebPage varchar, clicks bigint, broken int, site_lang varchar, width_of_image float, height_of_image float, image_type varchar, image_extension varchar, image_attribute varchar, providerName varchar, cmsUsed varchar, authorName varchar, authorUrl varchar, publishedTime timestamp, centroidScore float, graphBasedScore float, scrapeScore float, centroidWeightedScore float, created_date timestamp) WITH caching='ALL';"); // Using a SSTable Attached Secondary Index (SASI) for "LIKE" (https://docs.datastax.com/en/dse/5.1/cql/cql/cql_using/useSASIIndex.html): $con->execute("CREATE CUSTOM INDEX images_prefix ON images(siteUrl, alt, title, keywords, description, textFromWebPage) USING 'org.apache.cassandra.index.sasi.SASIIndex'"); $query = $con->prepare("INSERT INTO images(siteUrl, imageUrl, alt, title, description, keywords, textFromWebPage, clicks, broken, site_lang, width_of_image, height_of_image, image_type, image_extension, image_attribute, providerName, cmsUsed, authorName, authorUrl, publishedTime, centroidScore, graphBasedScore, scrapeScore, centroidWeightedScore, created_date) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $data = array($url, $src, $alt, $title, $description, $keywords, $htmlContentToTxt, $urlClicked, $urlBroken, $lang, $width, $height, $type, $imageExtension, $attr, $providerName, $cmsUsed, $authorName, $authorUrl, $publishedTime, $centroidScore, $graphBasedScore, $scrapeScore, $centroidWeightedScore, $crawledDate ); $futures = array(); // execute all statements in background foreach ($data as $arguments) { // $futures[] = $session->executeAsync($statement, array( $futures[] = $con->executeAsync($query, array( // "executeAsync" est utilisé dans "CASSANDRA Asynchronous" 'arguments' => $arguments )); } // wait for all statements to complete foreach ($futures as $future) { // we will not wait for each result for more than 10 seconds. You must ensure that this future has enough time to be executed by calling "Future::get()" $future->get(10); } }
Mes problèmes:

- à propos de la variable $data. Sur la demo du lien du driver Cassandra-PHP-Datastax ci-dessus, ils ont utilisé un tableau multidimensionnel mais dans mon cas, c'est juste un tableau simple que je cherche à utilisé.

- Etant donné que c'est mon code ci-dessus est dans une fonction, quelle valeur devrais-je retourner dans le bas de ma fonction insertImage ???
Dois-je retourner le tableau $futures ou la variable $future->get(10) ???


Merci de me guider s'il vous plaît.

Mammouth du PHP | 1967 Messages

19 juin 2022, 18:23

Comme on te l'a déjà dit, tu cherche à utiliser des outils très spécifique et à moins qu'un expert de cet outil soit sur phpfrance (peu probable) on va pas lire la doc et faire ton boulot à ta place.

par des exemples et test, test, test, ....
modifie un peu et test, test, test, ....
....

maintenant le code donnée n'a pas d'instruction return, et si tu hésite entre 2 choses test les deux (même si la première fonctionne)
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Eléphanteau du PHP | 41 Messages

25 juin 2022, 13:28

complétement d'accord avec Spols.
En plus c'est un monstre ta fonction moi j'aurai créé une class par exemple.
l'avantage d'une class c'est que de pouvoir étaler et éclater la complexité en petites partie testable
tu peux définir les requêtes dans des constantes et de manière lisible pour une réutilisation exemple :
    const REQUET_CREATE_TABLE =
        'CREATE TABLE IF NOT EXISTS images(' .
        'siteUrl varchar PRIMARY KEY,' .
        'imageUrl varchar,' .
        'alt varchar,' .
        'title varchar,' .
        'description varchar,' .
        'keywords varchar,' .
        'textFromWebPage varchar,' .
        'clicks bigint,' .
        'broken int,' .
        'site_lang varchar,' .
        'width_of_image float,' .
        'height_of_image float,' .
        'image_type varchar,' .
        'image_extension varchar,' .
        'image_attribute varchar,' .
        'providerName varchar,' .
        'cmsUsed varchar,' .
        'authorName varchar,' .
        'authorUrl varchar,' .
        'publishedTime timestamp,' .
        'centroidScore float,' .
        'graphBasedScore float,' .
        'scrapeScore float,' .
        'centroidWeightedScore float,' .
        'created_date timestamp' .
        ') WITH caching=\'ALL\';';
ça te permet par la suite :
1 - de réutilise cette requête en class::REQUET_CREATE_TABLE
2 - pouvoir modifier ta requête facilement en supprimant des parties ou en les modifiants
3 - c'est lisible et tu auras une meilleur maintenabilité du code et pas besoin de faire des commentaires
4 - imaginons que ton problème vien de là ? dans un fouillis tu prendras beaucoup de temps à trouvé le problème
5 - c'est agréable et si tu taf dans une entreprise on garde les gens qui produisent du contenu lisible j'ai pas dis qui produisent de la doc. la mode est au code qui demande le moins possible d'écrire des commentaires mais etle code est suffisamment lisible et explicite pour ne pas être commenté sauf cas d'exception je pense qu'ici , je pense qu'il faudrait mettre quelques ligne sur le "IF NOT EXISTS images" juste pour rappeler son utilisation par exemple moi je suis pas fana ni ouf de SQL je débarque dans ton code je comprend globalement mais c'est quoi les argument de images() et son objectif et a partir de là c'est une information à produire.