web-dev-qa-db-fra.com

Comment afficher les erreurs pour ma requête MySQLi?

J'utilise le script suivant pour traiter un formulaire afin d'ajouter des informations à mon site Web. Le problème que je rencontre est que lorsque je soumets le formulaire, rien n’est soumis à la base de données et il n’ya aucune erreur. Comment puis-je ajouter un rapport d'erreur à ma requête?

<?php
if (isset($_POST['itemdescription'])) {$itemdescription = $_POST['itemdescription'];}else {$itemdescription = '';}
if (isset($_POST['itemnumber'])) {$itemnumber = $_POST['itemnumber'];}else {$itemnumber = '';}
if (isset($_POST['sellerid'])) {$sellerid = $_POST['sellerid'];}else {$sellerid = '';}
if (isset($_POST['purchasedate'])) {$purchasedatepre = $_POST['purchasedate'];$date = DateTime::createFromFormat("D F d, Y", $purchasedatepre);$purchasedate = date('Y-m-d',strtotime($purchasedatepre));}else {$purchasedatepre = ''; $purchasedate = '';}
if (isset($_POST['otherinfo'])) {$otherinfo = $_POST['otherinfo'];}else {$otherinfo = '';}
if (isset($_POST['numberofitems'])) {$numberofitems = $_POST['numberofitems'];}else {$numberofitems = '';}
if (isset($_POST['numberofitemsused'])) {$numberofitemsused = $_POST['numberofitemsused'];}else {$numberofitemsused = '';}
if (isset($_POST['isitdelivered'])) {$isitdelivered = $_POST['isitdelivered'];}else {$isitdelivered = '';}
if (isset($_POST['price'])) {$price = $_POST['price'];}else {$price = '';}

$itemdescription = str_replace("'", "", "$itemdescription");
$itemnumber = str_replace("'", "", "$itemnumber");
$sellerid = str_replace("'", "", "$sellerid");
$otherinfo = str_replace("'", "", "$otherinfo");

include("connectmysqli.php"); 

mysqli_query($db,"INSERT INTO stockdetails (`itemdescription`,`itemnumber`,`sellerid`,`purchasedate`,`otherinfo`,`numberofitems`,`isitdelivered`,`price`) VALUES ('$itemdescription','$itemnumber','$sellerid','$purchasedate','$otherinfo','$numberofitems','$numberofitemsused','$isitdelivered','$price')");

// header('Location: stockmanager.php?&key='.$key);
?>
44
Iain Simpson

Ajoutez simplement or die(mysqli_error($db)); à la fin de votre requête, cela affichera l'erreur mysqli.

 mysqli_query($db,"INSERT INTO stockdetails (`itemdescription`,`itemnumber`,`sellerid`,`purchasedate`,`otherinfo`,`numberofitems`,`isitdelivered`,`price`) VALUES ('$itemdescription','$itemnumber','$sellerid','$purchasedate','$otherinfo','$numberofitems','$numberofitemsused','$isitdelivered','$price')") or die(mysqli_error($db));

En remarque, je dirais que vous êtes à risque de mysql injection, cochez cette case Comment puis-je empêcher l’injection SQL en PHP? . Vous devriez vraiment utiliser des déclarations préparées pour éviter tout risque.

70
Fabio
mysqli_error()

Un péché:

$sql = "Your SQL statement here";
$result = mysqli_query($sql) or trigger_error("Query Failed! SQL: $sql - Error: ".mysqli_error(), E_USER_ERROR);

L’erreur de déclenchement vaut mieux que mourir parce que vous pouvez l’utiliser pour le développement ET la production, c’est la solution permanente.

25
Jessica

Pour des raisons de développement, vous pouvez ajouter or die(mysqli_error($conn)) avant le point-virgule dans votre ligne mysqli_query($conn, 'SELECT...').

Assurez-vous de le supprimer avant de passer en production afin de ne pas publier d'informations sur votre base de données au public.

6
Travesty3