【问题标题】:How to retrun from sql to php on successful statement [duplicate]如何在成功的语句上从 sql 返回到 php [重复]
【发布时间】:2019-08-27 20:41:23
【问题描述】:

我正在使用 PHP 向表中插入数据,并想了解 SQL 是否正常工作,以便显示成功消息。有没有办法在语句执行后将 SQL 的成功返回给 PHP。

    function addPlayer($playerName, $dateOfBirth, $team) {
       $sql = "INSERT INTO players VALUES (DEFAULT, :name, :teamID, :dob)";
       $stmt = $this->connection->conn->prepare($sql);
       $stmt->bindParam(":name", $playerName);
       $stmt->bindParam(":dob", $dateOfBirth);
       $stmt->bindParam(":teamID", $team);
       $stmt->execute();
    }

想知道execute语句是否成功,数据是否添加到表中。有没有办法让 SQL 返回成功或失败,以便我可以在页面上显示错误或成功消息?

【问题讨论】:

  • 如何设置PDO::ATTR_ERRMODE 选项?
  • 我自己没有设置任何东西,所以我认为它是默认值。但是,我认为这是因为 PDO 错误没有返回 SQL 查询的成功,因为失败的 SQL 查询可能并不总是抛出 PDO 错误?
  • 默认的错误模式是只返回FALSE而不是抛出错误。建议开启PDO::ERRMODE_EXCEPTION,使用try/catch报错。
  • 不,你在生产中肯定需要它,所以如果出现问题脚本会停止。

标签: php sql return


【解决方案1】:
   $sql = "INSERT INTO players VALUES (DEFAULT, :name, :teamID, :dob)";
       $connect= $this->connection->conn;
        $stmt= $connect->prepare($sql);
       $stmt->bindParam(":name", $playerName);
       $stmt->bindParam(":dob", $dateOfBirth);
       $stmt->bindParam(":teamID", $team);
       return   (   $stmt->execute()  && $connect->rowCount()>0);



或者很快

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

【讨论】:

  • 这是如何工作的,在执行之前我肯定需要知道行数吗?
  • 真的有必要查rowCount()吗? INSERT 不会插入任何行的唯一原因是它是否出现错误。
  • @6C69616D 只是测试行数是否非零。
  • 如果你违反了一个唯一性约束,它会得到一个错误,所以execute()会返回FALSE
  • @6C69616D 是的。任何阻止查询完成的事情都将被视为错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 2020-04-27
  • 2014-01-29
  • 2016-10-06
  • 2010-09-23
相关资源
最近更新 更多