【问题标题】:PHP : How to know if my query is success or not?PHP:如何知道我的查询是否成功?
【发布时间】:2014-07-07 10:33:33
【问题描述】:

我提出这个要求:

$query_search = "insert into tbl_user (prenom, nom, ville, username, password) values ('".$prenom."', '".$nom."', '".$ville."', '".$username."', '".$password."') ";

$query_exec = mysql_query($query_search) or die(mysql_error());

我想知道结果是否成功。我该怎么做?

【问题讨论】:

  • 也许检查函数的返回值?
  • 很多反对票。也许向用户解释为什么?

标签: php sql


【解决方案1】:

首先,请考虑使用MySQLiPDO 库,因为mysql_ 前缀已被弃用并且远不如更新后的库安全。

您的新代码如下所示:

$sql = new MySQLi(//your database host, user, db name and password here);
$query_search = "insert into tbl_user (prenom, nom, ville, username, password) values ('".$prenom."', '".$nom."', '".$ville."', '".$username."', '".$password."') ";

$query_exec = $sql->query($query_search) or die($sql->error);

此外,如果您对 PHP 使用面向对象的语法感到不舒服,您可以像这样使用 MySQLi 的过程语法:

$sql = new MySQLi(//database and connection information as before);
$query_search = "insert into tbl_user (prenom, nom, ville, username, password) values ('".$prenom."', '".$nom."', '".$ville."', '".$username."', '".$password."') ";

$query_exec = mysqli_query($sql, $query_search) or die(mysqli_error($sql));

请务必注意,对于 MySQLi 的新语法,您必须为过程函数提供 $sql 对象作为函数中的 link 参数

如果查询失败,query 函数返回 false,如果成功则返回一个对象,因此您可以使用以下方法测试查询结果:

if($query_exec) { 
    //do your success things 
} else {
    //error handling
}

作为额外说明和其他用户提到的内容,die 并不是真正必要的,除非您绝对必须在查询失败后停止执行所有操作。通常,我会将其保留在$query_exec = $sql->query($query_search); 并在上面的错误处理部分中进行后备。

【讨论】:

    【解决方案2】:

    试试这个代码:

    $query_search = "insert into tbl_user (prenom, nom, ville, username, password) values ('".$prenom."', '".$nom."', '".$ville."', '".$username."', '".$password."') ";
    
    $query_exec = mysql_query($query_search) or die(mysql_error());
    if($query_exec)
    {
    echo "sucess";
    }
    else
    {
    echo "failed";
    }
    

    【讨论】:

    • 点击die() 不会停止吗?那你在检查什么?
    • @Leri?如何? FALSE 将触发 die() 调用,并在此处结束脚本。还是我错过了什么?
    • 哦,所以我确实错过了一些东西:D
    • @DamienPirsy 有一个隐藏得很好的讽刺。 ;)
    【解决方案3】:

    mysql_query 返回一个资源,或者FALSE 出错。您可以通过检查 mysql_query 返回的内容来检查失败,例如

    $query_exec = mysql_query($query_search);
    if($query_exec === FALSE)
        ...error handling...
    else
        ...success...
    

    目前,如果出现错误,您会告诉 PHP 放弃并打印出错误。这是因为 andor 运算符(而不是 &&|| 运算符)具有 更低的 优先级,因此 $query_exec 将包含比较的结果,而如果是FALSE,会导致PHP死机。

    注意=== 的使用。这是一个严格的比较,不会发生类型强制。虽然在这种情况下可以使用标准的 == 运算符(资源不会被强制为 FALSE),但在检查错误时最好使用此运算符。许多函数可以成功并返回FALSE,而不是在错误时返回NULL,它被强制为FALSE。在这种情况下,需要进行严格的比较来区分FALSENULL

    【讨论】:

      【解决方案4】:

      您可以使用mysql_affected_rows() 检查查询中插入或更新了多少行。

      所以在你的情况下:

      $query_search = "insert into tbl_user (prenom, nom, ville, username, password) values ('".$prenom."', '".$nom."', '".$ville."', '".$username."', '".$password."') ";
      
      $query_exec = mysql_query($query_search) or die(mysql_error());
      
      $affected_rows = mysql_affected_rows();
      
      if($affected_rows > 0){
          //Rows inserted.
      }
      

      【讨论】:

        【解决方案5】:

        您的 $query_exec 变量将作为判断者,即成功时将评估为 true,如果失败则评估为 false。非要问这个为什么还要设置?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-20
          • 1970-01-01
          • 1970-01-01
          • 2011-08-10
          • 2010-11-02
          • 1970-01-01
          相关资源
          最近更新 更多