Obtenir des messages d'erreur lorsque $ wpdb-> insert () retourne false?
-
-
Vérifiez $ wpdb-> last_errorpour uneerreur d'insertionCheck $wpdb->last_error for inserting error
- 0
- 2017-08-23
- Anton Lukin
-
@Anton Lukin Ouais désolé aurait dû dire ça.J'aibien sûressayémais c'estjuste vide.@Anton Lukin Yea sorry should have told that. Have of course tried that but it's just empty.
- 0
- 2017-08-23
- Peter Westerlund
-
Essayez de le déboguer.Utilisez $ wpdb-> last_query après l'insertion,puiseffectuez cette requête via le clientmysqlpour voir l'erreur.C'estpossible?Try to debug it. Use $wpdb->last_query after inserting, then make this query via mysql client to see the error. Is it possible?
- 0
- 2017-08-23
- Anton Lukin
-
@Anton Lukin Même si la dernière requêteest un `insert ()`,le `$ wpdb-> last_query`juste aprèsmontre une requête` SELECT * FROM .... `.@Anton Lukin Even though the last query is an `insert()`, the `$wpdb->last_query` right after shows an `SELECT * FROM ....`-query.
- 0
- 2017-08-23
- Peter Westerlund
-
Nouspouvons legagner :) ajoutez des savequeries dans votre wp-config.php https://wordpress.stackexchange.com/a/110270/126253We can win it :) add savequeries in your wp-config.php https://wordpress.stackexchange.com/a/110270/126253
- 0
- 2017-08-23
- Anton Lukin
-
@Anton Lukin Bon sang,je me suistordu du retour.Il renvoie «false»,pas «0».Ilest unpeu difficile d'obtenir les requêtes dans lepied depage carmes opérations sonteffectuées avec ajax.Maisj'aiessayé de leplacer après le code dans lephp qu'ajax appelle.Etpuis l'a appelé àpartir dunavigateur.Maintenant,j'aitrouvé que quelque chose sebrisaiten chemin,dans laboucle.Je dois décomposer de quoiil s'agit.Mais c'est quelque choseplustard après l'insertion défaillante.Il y a donctoujours unproblème là-bas.Mais difficile à déboguer ... Je vais continuer d'essayer ...@Anton Lukin Damn it I got wring about the return. It returns `false`, not `0`. It's a bit difficult to get the queries in the footer since my operations is done with ajax. But I tried to place it after an the code in the php that ajax calls. And then called it from the browser. Now I found that something is breaking on the way, in the loop. Have to break down what that is about. But it's something later after the failing insert. So there's still a problem there. But hard to debug.. I'll keep trying...
- 0
- 2017-08-23
- Peter Westerlund
-
@Anton Lukin Ok,j'aimaintenanttrouvé la requête.Donc,apparemment cela échoue: `[75]=> Array ([0]=> INSERT INTO results (parent_id,parent_id,key_code,value,url,cat_ids) VALUES (0,7,'posts','','','') [1]=> 0.0037600994110107 [2]=> do_action ('wp_ajax_my_save_result'),WP_Hook-> do_action,WP_Hook-> apply_filters,call_user_func_array,my_save_result,pw_save,PW-> save_result `@Anton Lukin Okay I now found the query. So, apparently this fails: `[75] => Array ( [0] => INSERT INTO results (parent_id, parent_id, key_code, value, url, cat_ids) VALUES (0, 7, 'posts', '', '', '') [1] => 0.0037600994110107 [2] => do_action('wp_ajax_my_save_result'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, my_save_result, pw_save, PW->save_result, PW->get_posts )`
- 0
- 2017-08-23
- Peter Westerlund
-
est-ce que c'est ok doubleparent_id,parent_id dans votre requête?is it ok double parent_id, parent_id in your query?
- 0
- 2017-08-23
- Anton Lukin
-
@Anton Lukin Désolé,c'estfaux,le secondest `parent_x_id`.Je veuxen faire unpeu secret.@Anton Lukin Sorry that's wrong, the second is `parent_x_id`. Wanna make it a bit secret.
- 0
- 2017-08-23
- Peter Westerlund
-
D'accord,j'ai réussi à résoudre leproblèmeen désinfectant l'urlet la valeur avec `esc_url ()`et `esc_html ()` avant `insert ();`.Toujoursmauvais sans aucunmessage d'erreur à ce sujet ...Okay I succeeded to fix it by sanitize the `url` and `value` with `esc_url()` and `esc_html()` before the `insert();`. Still bad with no error messages about it...
- 0
- 2017-08-23
- Peter Westerlund
-
2 réponses
- votes
-
- 2019-01-22
Laméthode
$wpdb->insert()
renvoiefalse
si la lignen'apaspu êtreinsérée.Sinon,il renvoie lenombre de lignes affectées (qui seratoujours 1).Vouspouvez activeret désactiver l'écho d'erreur avec les
show_errors
ethide_errors
,respectivement.<?php $wpdb->show_errors(); ?> <?php $wpdb->hide_errors(); ?>
Vouspouvez égalementimprimer l'erreur (le cas échéant)généréepar la requête laplus récente avec
print_error
.<?php $wpdb->print_error(); ?>
Vouspouvez également utiliser le champ
$last_error
,qui contiendra letexte d'erreur leplus récentgénérépar MySQL.$wpdb->insert()
method returnsfalse
if the row could not be inserted. Otherwise, it returns the number of affected rows (which will always be 1).You can turn error echoing on and off with the
show_errors
andhide_errors
, respectively.<?php $wpdb->show_errors(); ?> <?php $wpdb->hide_errors(); ?>
You can also print the error (if any) generated by the most recent query with
print_error
.<?php $wpdb->print_error(); ?>
You can also use
$last_error
field, which will contain the most recent error text generated by MySQL.-
Ce seraitbien de voir unexemple du champ `$ last_error`.Est-cejuste `$ wpdb-> last_error`?Would be good to see an example of the `$last_error` field. Is it just `$wpdb->last_error`?
- 0
- 2019-01-23
- Simon East
-
Oui,exactement `$ wpdb-> last_error`Yes, exactly `$wpdb->last_error`
- 0
- 2019-01-23
- Krzysiek Dróżdż
-
Notez que si une écritureestinterrompue car une colonneesttrop longue,aucuneerreurn'est renvoyée.Autrement dit,$ wpdb-> last_error` sera vide,et ni `$ wpdb-> show_errors ()`ni `$ wpdb-> hide_errors ()`n'aideront.Voirma réponse ci-dessouspour unmoyen de changer ce comportement.Note that, if a write is aborted because a column is too long, no error is returned. That is, $wpdb->last_error` will be empty, and neither `$wpdb->show_errors()` and `$wpdb->hide_errors()` will help. See my answer below for a way to change this behaviour.
- 0
- 2020-08-28
- Brian C
-
- 2020-08-28
Malheureusement,
wp-db.php
renvoiefalse sanserreur,si les données que vousessayez d'écrire dans une colonne sonttrop longuespourtenir. Cela devient un cauchemar à déboguer sans vérifierexplicitement la longueur de chaque colonne (etilest difficile de connaître les longueurs,bien que wp-db.phpfournisse desfonctionsinternes).J'ai créé unpetit remplacement de drop-in quimodifie le comportement de wpdbpour renvoyer uneerreur dans ce scénario. Pour l'installer,il vous suffit de le copieret de le coller dans votrefichier WordPress wp-content/db.php. Ilne remplace qu'une seuleméthode wpdb courte (
process_fields()
)pour ajouter unmessage d'erreuridentifiant la colonnetrop longue. Notez que db.php survivra auxmises àjour dunoyau,et vouspouvez simplement supprimer lefichier wp-content/db.php àtoutmomentpour revenir aupurnoyau wpdb.Bien quej'utilisemoi-même,comme d'habitude,tester avant utilisationet utilisationest à vos risqueset périls.
Le code d'erreurprovient à l'origine d'une idée de Liam Murphyici .
Sadly,
wp-db.php
returns false with no error, if the data you are trying to write to a column is too long to fit. This becomes a nightmare to debug without explicitly checking each column's length (and it's hard to know the lengths, though wp-db.php does provide internal functions).I've created a tiny drop-in override which modifies wpdb behaviour to return an error in this scenario. To install it, you simply copy and paste it into your WordPress wp-content/db.php file. It overrides only a single, short, wpdb method (
process_fields()
) to add an error message identifying the column that is too long. Note that db.php will survive core upgrades, and you can simply remove the wp-content/db.php file at any time to revert to pure core wpdb.Although I use this myself, as usual, test before use and usage is at your own peril.
The error code is originally taken from an idea by Liam Murphy here.
$wpdb->insert()
renvoiefalse
ce quej'ai appris signifie que l'insertion a échoué. Maintenant,j'aimerais savoirpourquoi cela échoue avec l'insertion.Selon ceticket https://core.trac.wordpress.org/ticket/32315 leproblèmepeut être que la valeuresttrop longue ou contient des caractèresincorrects.
Voici la requête d'insertion:
Ilest difficile d'afficher les valeurs dutableau
$ins_args
car certaines valeurs sont assez longues. Spécialement celuipour le champnommévalue
. Maisj'utilise letypelongtext
pour ce champ. Et cetinsertestbeaucoup utilisé. Et laplupart dutemps,celafonctionne avec succès. Donc,cela ressemble vraiment à unproblème d'encodage ou detaille.Commentpuis-je savoir quelest leproblème?
$wpdb->last_error
est vide