【问题标题】:How to display errors for my MySQLi query? [duplicate]如何显示我的 MySQLi 查询的错误? [复制]
【发布时间】:2013-06-07 20:31:24
【问题描述】:

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

<?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);
?>

【问题讨论】:

    标签: php mysql mysqli


    【解决方案1】:

    只需在查询末尾添加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));
    

    作为旁注,我会说您面临mysql injection 的风险,请在此处查看How can I prevent SQL injection in PHP?。你真的应该使用准备好的语句来避免任何风险。

    【讨论】:

    • 请选择“trigger_error()”而不是“die()” trigger_error("查询失败!SQL: $sql - 错误: ".mysqli_error($db), E_USER_ERROR);
    • 或者更好的是,抛出和异常并可能处理它。两者都比愚蠢和流行的or die更可取。
    【解决方案2】:
    mysqli_error()
    

    如:

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

    触发错误比死好,因为您可以将其用于开发和生产,这是永久的解决方案。

    【讨论】:

    • +1,但我会详细说明如何将它用于开发和生产(如何在生产中不显示错误)。
    • 如果你只是让错误打印到屏幕上就不会。
    • 对于那些可能想知道的人:trigger_error() 对生产和开发都很好,因为在生产中通常会关闭错误报告。 trigger_error 因此不会被打印出来。
    • @KarlosFontana 你不应该有类似'or die: "Sorry the query $sql failed with this error: $error"'。请阅读PHP error reporting basics
    • @JohnReid 严格来说,错误报告 也应该在生产中设置为最大。 显示错误应该关闭什么。人们经常把这两件事弄错,这就是我冒昧介入的原因。
    猜你喜欢
    • 2019-08-28
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 2017-08-02
    相关资源
    最近更新 更多