EXISTS always returns true 简单查询

EXISTS always returns true simple query

我使用此代码检查条目是否已存在,但查询似乎总是 returns 为真。当我在 shell 上使用相同的查询时,它工作正常。请记住 foodname 是主键。

$query = "SELECT EXISTS ( SELECT * FROM Food WHERE foodname = '$food_name')";
    $result = pg_query($conn,$query) or die("Query could not be executed");
    if($result)
    {
        echo 'food already exists: ';
        echo $food_name;
        printf("\n");
    }
    else
    {
        echo 'new food inserted';
        printf("\n");
        $query = "INSERT INTO food VALUES ('$food_name','$food_price','$food_date')";
        $result = pg_query($conn,$query) or die("Query could not be executed");
    }

问题:我修改了它,就像 'download download' 所说的那样,它可以工作,因为它也可以与 Kettners 的答案一起工作,但是检查条目是否已经存在的速度并不快,因为它在找到时停止一双?在这种情况下是否有任何使用 EXISTS 的查询?感谢您的帮助。

答案:在阅读了你们所说的所有内容后,我选择使用以下一个,它有效并且还使用了 EXISTS。

$query = "SELECT 1 FROM food WHERE EXISTS ( SELECT * FROM Food WHERE foodname = '$food_name')";
        $result = pg_query($conn,$query) or die("Query could not be executed");
        $row = pg_fetch_row($result);
        if($row[0])
        {
            echo 'food already exists: ';
            echo $food_name;
            printf("\n");
        }
        else
        {
            echo 'new food inserted';
            printf("\n");
            $query = "INSERT INTO food VALUES ('$food_name','$food_price','$food_date')";
            $result = pg_query($conn,$query) or die("Query could not be executed");
        }

数据库: postgresql
查询: 在成功 t 和失败 f
时给出结果 类型: 布尔值。

你必须改变你的if条件。[​​=25=]

if($result == 't'){
   // Your code here
}else {
  // Your code here
}

修改:

$result = pg_query($conn, "Your Query");
$rows = pg_num_rows($result);
if($rows != -1){
   // Success
}else {
   // Fail
}

试试这个:

  $query="SELECT * FROM Food WHERE foodname = '$food_name'";
  $result = pg_query($conn,$query) or die("Query could not be executed");

  if(pg_num_rows($result )>=1){
     echo 'food already exists: ';
     echo $food_name;
     printf("\n");
  }
else{
        echo 'new food inserted';
        printf("\n");
        $query = "INSERT INTO food VALUES ('$food_name','$food_price','$food_date')";
        $result = pg_query($conn,$query) or die("Query could not be executed");
}

pg_query returns 结果资源。您可以使用 pg_fetch_row 查询此资源以获取数据。

pg_query 仅在语句失败时 returns FALSE。但是,您的声明永远不会失败(只要您可以正确访问数据库和 table)。它运行并 returns 一个值(TRUE 或 FALSE)。

因此 if($result) 始终 returns 为真,不会为您提供有关查询结果的任何信息。

这应该有效:执行查询,获取第一行,检查它的第一(也是唯一)列。

$query = "SELECT EXISTS (SELECT * FROM Food WHERE foodname = '$food_name')";
$result = pg_query($conn,$query) or die("Query could not be executed");
$row = pg_fetch_row($result);
if($row[0])
{
  echo 'food already exists: ';
  echo $food_name;
  printf("\n");
}
else
{
  echo 'new food inserted';
  printf("\n");
  $query = "INSERT INTO food VALUES ('$food_name','$food_price','$food_date')";
  $result = pg_query($conn,$query) or die("Query could not be executed");
}