$ wpdb-> last_error n'affiche pas la requête en cas d'erreur
-
-
Mêmeproblème que vous,car votre solution afonctionné.Merci!Same problem as you, as your solution worked. Thanks!
- 0
- 2019-07-23
- Allen Gingrich
-
3 réponses
- votes
-
- 2016-04-29
Si vous voulez la requête ,ce sera
$wpdb->last_query
(notez que vousn'avezpasnonplusbesoin deSAVEQUERIES
,c'est seulement si vous voulez unjournal de chaque requête ($wpdb->queries
)last_error
est ...ehbien,l'erreur!Mise àjour: Explicationpossiblepour
last_error
étant vide - c'est la source dewpdb::query()
:// If we're writing to the database, make sure the query will write safely. if ( $this->check_current_query && ! $this->check_ascii( $query ) ) { $stripped_query = $this->strip_invalid_text_from_query( $query ); // strip_invalid_text_from_query() can perform queries, so we need // to flush again, just to make sure everything is clear. $this->flush(); if ( $stripped_query !== $query ) { $this->insert_id = 0; return false; } } // Redacted code // Keep track of the last query for debug.. $this->last_query = $query; $this->_do_query( $query ); // Redacted code // If there is an error then take note of it.. if ( $this->use_mysqli ) { $this->last_error = mysqli_error( $this->dbh ); } else { $this->last_error = mysql_error( $this->dbh ); }
En d'autrestermes,WordPress semble vérifier demanièrepréventive la requêteet abandonnera s'ilestime qu'elle échouera - dans ce cas,vous obtenez votre
return false
mais aucuneerreurne sera définie (cariln'ajamais étéenvoyé au serveur MySQL).If you want the query, that'll be
$wpdb->last_query
(note that you also do not needSAVEQUERIES
, that's only if you want a log of every query ($wpdb->queries
)last_error
is... well, the error!Update: Possible explanation for
last_error
being empty - this is the source ofwpdb::query()
:// If we're writing to the database, make sure the query will write safely. if ( $this->check_current_query && ! $this->check_ascii( $query ) ) { $stripped_query = $this->strip_invalid_text_from_query( $query ); // strip_invalid_text_from_query() can perform queries, so we need // to flush again, just to make sure everything is clear. $this->flush(); if ( $stripped_query !== $query ) { $this->insert_id = 0; return false; } } // Redacted code // Keep track of the last query for debug.. $this->last_query = $query; $this->_do_query( $query ); // Redacted code // If there is an error then take note of it.. if ( $this->use_mysqli ) { $this->last_error = mysqli_error( $this->dbh ); } else { $this->last_error = mysql_error( $this->dbh ); }
In other words, WordPress seems to pre-emptively check the query and will abort if it deems it will fail - in this case you get your
return false
but no error will be set (since it was never sent to the MySQL server).-
maispourquoiest-ce queje n'aitoujours rien dans la dernière_error?insérer la requête donne la valeurfalse,ce qui signifie que quelque chose a échoué,maisne contienttoujours rien dans last_error?Wierd?but why don't I still get anything in the last_error? insert query results in false which means something failed, but still doesn't contain anything in last_error? Wierd?
- 0
- 2016-04-29
- Ghazanfar Mir
-
Réponsemise àjour avecexplicationpossible.Updated answer with possible explanation.
- 0
- 2016-04-29
- TheDeadMedic
-
Alors,quelleest lameilleurefaçon d'obtenir cetravail?Je veux diretoujours obtenir quelque chose dans last_erroren cas d'erreursSo what is the best way to get this work? I mean always get something in last_error upon errors
- 0
- 2016-04-29
- Ghazanfar Mir
-
- 2016-04-29
essayez ceci
$wpdb->show_errors(); $result = $wpdb->insert($this->table, $data_);
try this
$wpdb->show_errors(); $result = $wpdb->insert($this->table, $data_);
-
Désolé,malheureusement celane fonctionnepas.Leproblèmeest que l'erreurest causéepar le code wpdb qui setermine simplement avecfalseet ne définitpas `last_error`.Sorry, unfortunately that doesn't work. The problem is that the error is caused by wpdb code which actually just exits with false and doesn't set `last_error`.
- 0
- 2020-08-28
- Brian C
-
- 2019-03-10
https://core.trac.wordpress.org/ticket/32315
L'une desentrées de colonnespeut êtreplusgrande que la colonne. Wordpress détecte celaet n'enverramêmepas la requête à labase de données.
Le Diffmontre unpatchpour wp-db que vouspouvezmettrepour obtenirplus d'informations dans lemessage last_error afin qu'ilne soitpas vide.
https://core.trac.wordpress.org/ticket/32315
One of the columns inputs may be larger than the column is. Wordpress detects this and will not even send the query to the DB.
The Diff there shows a patch for wp-db you can put in to get more information in the last_error message so it will not be empty.
-
C'est vraiment unebonne réponse.J'ai adapté votre réponse dans unfichier wp-content/db.php afin qu'ilpuisse êtrefacilementet rapidementmisen placepour conserver une solution àtravers lesmises àniveau WordPress.[Voiricipour l'essentielet plus de détails] (https://wordpress.stackexchange.com/a/373903/18358).This is truly a cool answer. I've adapted your answer into a wp-content/db.php file so it can be easily and quickly dropped in place to persist a solution across WordPress upgrades. [See here for gist and more details](https://wordpress.stackexchange.com/a/373903/18358).
- 0
- 2020-08-28
- Brian C
-
Oh,merci @BrianC J'ai vu une-mailil y apeu detemps que ceproblème amaintenant unjalon de 5,6.Oh neat thanks @BrianC I saw an email a little while back that this issue has a milestone of 5.6 now.
- 0
- 2020-08-29
- Liam Mitchell
-
On dirait qu'un correctif debaseestproposémais a raté 5.5et jepense que 5.6.Enespérant,soupir.Looks like a core fix is proposed but missed out on 5.5 and I think 5.6. Here’s hoping, sigh.
- 0
- 2020-08-29
- Brian C
J'insère des données dans latablepersonnalisée à l'aide de
$wpdb->insert
. Cependant,en cas d'erreur,je ne semblepas obtenir d'informations de$wpdb->last_error
. Quellepourraiten être la cause?J'ai déjà cette configuration définie dans
wp-config
Le codeest comme ci-dessous:
$this->table
et$data_
sont correctement renseignés lors de sonexécution. Maisje ne semblepas obtenir d'informations sur la requête qui a échoué. Puis-jefaireexécuter la requête réelle dans$wpdb->insert
?<½Solution
D'accord,j'ai donc compris leproblème. La requête d'insertion a échoué car l'une des données de colonne était énormeet dépassait lataille de colonne de labase de données. La colonne était
varchar(500)
mais les données réelles contenaientplus de 500 caractères,échouant ainsi la requête. J'ai changé la colonneenTEXT
et l'insertion a réussi sanserreur.