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");
}
我使用此代码检查条目是否已存在,但查询似乎总是 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");
}