EXISTS всегда возвращает истинно простой запрос

Я использую этот код, чтобы проверить, существует ли уже запись, но кажется, что запрос всегда возвращает true. Когда я использую тот же запрос на оболочке, он работает правильно. Имейте в виду, что имя пищи является первичным ключом.

$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");
}

ВОПРОС: Я изменил его так же, как сказал «скачать-скачать», и он работает так же, как и с ответом Кеттнерса, но разве не существует быстрее, чтобы проверить, существует ли уже запись по той причине, что она останавливается, когда находит пару? Есть ли какой-либо запрос, использующий 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");
}

3

Решение

Просто попробуйте это:

  $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");
}
1

Другие решения

База данных : PostgreSQL
Запрос: дает результат при успехе т и при неудаче ф
Тип : логическое значение.

Вы должны изменить свое условие if.

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
}
1

pg_query возвращает ресурс результата. Вы можете запросить этот ресурс с pg_fetch_row чтобы добраться до данных.

pg_query возвращает ЛОЖЬ, только когда оператор не выполняется. Однако ваше утверждение никогда не будет ошибочным (при условии, что вы можете правильно обращаться к базе данных и таблице). Он запускается и возвращает значение (ИСТИНА или ЛОЖЬ).

следовательно if($result) всегда возвращает true и не дает никакой информации о результате запроса.

Это должно сработать: выполнить запрос, извлечь первую строку, проверить ее первый (и единственный) столбец.

$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");
}
1
По вопросам рекламы [email protected]