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

时间:2015-06-16 06:46:02

标签: php mysqli

在我的代码中,有两个不同的查询。第一个是工作 - 我的意思是它转到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();

帮帮我。 (查询工作正常)

3 个答案:

答案 0 :(得分:2)

条件是个问题:

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

如果我们咨询query SELECT函数,我们会看到:

  

失败时返回FALSE。成功的SELECT,SHOW,DESCRIBE或   EXPLAIN查询mysqli_query()将返回一个mysqli_result对象。对于   其他成功的查询mysqli_query()将返回TRUE。

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

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

  1. 检查查询是否返回if ($conn->query($sqlmodeid_uderid) !== FALSE) {

    ==
  2. 使用===代替mysqli_result。第一个将在两种不同类型之间转换(true对象在转换为bool时等同于===if ($conn->query($sqlmodeid_uderid) == TRUE) { 执行类型安全比较,这意味着条件只会如果两个操作数具有相同的类型且具有相同的值,则满足。

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

    {{1}}
  4. 我会查看关于比较运算符的php.net文档,了解更多信息:

    documentation

答案 1 :(得分:0)

使用这样的代码......

$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'";

答案 2 :(得分:0)

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

$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