一个 php 文件中有两个查询,一个不起作用 - 为什么


Two queries in one php file, one is not working - why?

在我的代码中,有两种不同的查询。第一个是工作 - 我的意思是它进入if路径。问题出在通往else路径的第二个。

$adding_user_email=$arr[1];
$sessionuserid=$_SESSION['login_user_id'];
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "company";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}   
$sql = "INSERT INTO modes (userid,modename) VALUES ('$sessionuserid','".$arr[0]."')";
$sqlmodeid_uderid = "SELECT userid FROM register where useremail='".$arr[1]."'";
if ($conn->query($sql) === TRUE) {
  echo "New record created successfully";
} else {
  echo "Error: " . $sql . "<br>" . $conn->error;
}
$sqlmodeid_uderid = "SELECT userid FROM register where useremail='$adding_user_email'";
if ($conn->query($sqlmodeid_uderid) === TRUE) {
  echo "userid fetched successfully";
} else {
  echo "Error: " . $sqlmodeid_uderid . "<br>" . $conn->error;
}
$conn->close();

帮我。(查询工作正常)

条件是有问题的:

$conn->query($sqlmodeid_uderid) === TRUE

如果我们查阅query函数的文档,我们将看到:

失败时返回 FALSE。成功选择、显示、描述或 EXPLAIN 查询 mysqli_query() 将返回一个mysqli_result对象。为 其他成功的查询 mysqli_query() 将返回 TRUE。

当您处理SELECT查询时,此调用将永远不会返回true 。它将在成功时返回一个mysqli_result对象,在失败时返回false对象。

相反,您可以通过多种方式重写此条件。

  1. 检查查询是否返回false

    if ($conn->query($sqlmodeid_uderid) !== FALSE) {
    
  2. 使用 == 而不是 === 。第一个将在两个不同的类型之间强制转换(并且mysqli_result对象在转换为bool时将等于true),而===执行类型安全比较,这意味着仅当两个操作数属于相同类型并具有相同的值时,才会满足条件。

    if ($conn->query($sqlmodeid_uderid) == TRUE) {
    
  3. 第 2 点中的相同逻辑可以用几种不同的方式编写:

    if ($conn->query($sqlmodeid_uderid)) {
    if ((bool)$conn->query($sqlmodeid_uderid)) {
    

我会查看有关比较运算符的 php.net 文档以获取更多信息:

http://php.net/manual/en/language.operators.comparison.php

使用这样的代码...

$adding_user_email=$arr[1];
                    $sessionuserid=$_SESSION['login_user_id'];
                    $servername = "localhost";
                        $username = "root";
                        $password = "";
                        $dbname = "company";
                        $conn = new mysqli($servername, $username, $password, $dbname);
                        if ($conn->connect_error) {
                            die("Connection failed: " . $conn->connect_error);
                        }   
                            $sql = "INSERT INTO modes (userid,modename) VALUES ('$sessionuserid','".$arr[0]."')";
                            $sqlmodeid_uderid = "SELECT userid FROM register where useremail='".$arr[1]."'";
                            $sqlmodeid_uderid = "SELECT userid FROM register where useremail='$adding_user_email'";

对于第二个查询,我认为你应该这样做,而不是做"=== TRUE"

$sqlmodeid_uderid = "SELECT userid FROM register where useremail='$adding_user_email'";
/* Select queries return a resultset */
if ($result = $conn->query($sqlmodeid_uderid)) {
  echo "userid fetched successfully";
} else {
  echo "Error: " . $sqlmodeid_uderid . "<br>" . $conn->error;
}

查看文档中的示例: http://php.net/manual/en/mysqli.query.php