如何显示MySQLi查询的错误?

Iai*_*son 46 php mysql mysqli

我使用以下脚本来处理表单以向我的网站添加信息.我遇到的问题是,当我提交表单时,没有任何内容被提交到数据库,并且没有错误.如何向查询添加错误报告?

<?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);
?>
Run Code Online (Sandbox Code Playgroud)

Fab*_*bio 73

只需or die(mysqli_error($db));在查询结束时添加,就会打印出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));
Run Code Online (Sandbox Code Playgroud)

作为旁注,我会说你有风险mysql injection,请点击这里如何在PHP中阻止SQL注入?.您应该使用准备好的语句来避免任何风险.

  • 请更喜欢"trigger_error()"而不是"die()"trigger_error("查询失败!SQL:$ sql - 错误:".mysqli_error($ db),E_USER_ERROR); (6认同)
  • 或者甚至更好,抛出异常并可能处理它。两者都比愚蠢而流行的“要么死”更可取。 (2认同)

Jes*_*ica 29

mysqli_error()
Run Code Online (Sandbox Code Playgroud)

如:

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

触发错误比die更好,因为你可以将它用于开发和生产,它是永久的解决方案.

  • 对于那些可能想知道的人:trigger_error() 适用于生产和开发,因为错误报告通常在生产中关闭。trigger_error 因此不会被打印出来。 (2认同)
  • @KarlosFontana您永远都不会像'*或死:“抱歉,查询$ sql失败,出现此错误:$ error *”“。请阅读有关[PHP错误报告基础知识](https://phpdelusions.net/articles/error_reporting) (2认同)

Tra*_*ty3 6

出于开发目的,您可以在行中or die(mysqli_error($conn))的分号前添加mysqli_query($conn, 'SELECT...').

确保在推送到生产之前删除它,因此不要向公众输出有关数据库的信息.