Я использую этот код, чтобы проверить, существует ли уже запись, но кажется, что запрос всегда возвращает 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");
}
Просто попробуйте это:
$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");
}
База данных : 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
}
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");
}