将重复数据输入数据库时​​如何显示不同的错误消息? Php / MySql

时间:2018-03-25 23:53:41

标签: php mysql pdo

我正在尝试这样做,当用户输入一个区域的名称时,如果重复同一个区域,它会在屏幕上显示"它发生错误",但我不能这样做。 /> Region.php:

class Region
{
    private $regID;
    private $regName;

    private function loadData()
    {

          if(isset($_POST["regID"]))
          {
              $this->setRegID($_POST["regID"]);
          }

          if(isset($_POST["regName"]))
          {
              $this->setRegNombre($_POST["regName"]);
          }
     }

       public function addRegion()
       {
            $this->loadData();

            $link = Connection::connect();

            $sql = "INSERT INTO regions(regName) VALUES (:regName)";

            $stmt = $link->prepare($sql);

            $regName = $this->getRegName();

            $stmt->bindParam(":regName",$regName,PDO::PARAM_STR);

            if($stmt->execute())
            { 
                return true;
            }
          return false;
       }
}


AddRegion.php:

<?php 
   require "class/Connection.php";
   require "class/Region.php";

     $objRegion = new Region();

      $objRegion->addRegion();

     if($objRegion){
 ?>
         <p>Added region</p>

    <?php }else{ ?>

      <p>An error occurred.</p>

          <?php /*if('error code==666'){ //With the error code show this:
                     <p>There is already a region with that name.</p>
                   }*/?>


  <?php } ?>

但我在屏幕上看到的内容如下:

  

警告:PDOStatement :: execute():SQLSTATE [23000]:完整性约束违规:1062重复条目&#39; America&#39;对于关键&#39; regName&#39;在第60行的C:\ xampp \ htdocs \ test \ class \ Region.php

     

添加了区域

  • 如何才能显示错误消息?
  • 我怎么能这样做,如果出现错误,则不会出现Region Added,但是&#34;发生了错误&#34;在屏幕上显示?
  • 如果错误是名称重复,我如何从MySQL错误代码中知道?

1 个答案:

答案 0 :(得分:0)

您收到错误消息,因为表区域中的数据库架构可能将regName定义为UNIQUE。因此,请查看您的数据库架构设计。

使用try..catch块来捕获PDOException

try {
    $objRegion->addRegion();
} catch (\PDOException $e) {
    $existingkey = "Integrity constraint violation: 1062 Duplicate entry";
    if (strpos($e->getMessage(), $existingkey) !== FALSE) {

        // here goes is your duplicate data error
    } else {
        throw $e;
    }
}

此示例取自(The only proper) PDO tutorial,值得一读,以便您在PHP中正确使用PDO。