2015-11-09 3 views
0

Я запускаю этот скрипт, который смотрит на входы $ area1 и $ area2 и проверяет их против моей базы данных, если они не являются потом, а вводит их. Это то, что я написал, но я новичок в PHP, и он не работает, и я не уверен, что есть лучший способ сделать это, но я не уверен в более эффективном решении.Проверить наличие и вставить, если не дублировать PHP/SQL

$query1 = "SELECT location_name FROM locations WHERE (location_name = '$area1')"; 
$connect->query($query1); 
if ($partner_result = $connect->query($query1)) { 
    $partner_row = $partner_result->fetch_row(); 
    if(!empty($partner_row)) { 
     $partners = $partner_row; 
     print_r($partners); 
    } else { 
     $insert_location = "INSERT INTO locations (location_id, location_name) VALUES (NULL, '".$area1."')" 
     $connect->query($insert_location); 
     echo "Location added<br>"; 
     $partners = false; 
    } 
    $partner_result->close(); 
} else { 
    $get_partners = false; 
} 
$query3 = "SELECT location_name FROM locations WHERE (location_name = '$area2')"; 
$connect->query($query2); 
if ($partner_result = $connect->query($query2)) { 
    $partner_row = $partner_result->fetch_row(); 
    if(!empty($partner_row)) { 
     $partners = $partner_row; 
     print_r($partners); 
    } else { 
     $insert_location = "INSERT INTO locations (location_id, location_name) VALUES (NULL, '".$area2."')" 
     $connect->query($insert_location); 
     echo "Location added<br>"; 
     $partners = false; 
    } 
    $partner_result->close(); 
} else { 
    $get_partners = false; 
} 
+1

Что (или какой запрос) не работает? Есть ли ошибки? – chris85

+0

Что-то случилось, когда вы вставили код, и он сместился вправо, пока вы едва можете его прочитать. Это «mysqli» или PDO или что-то еще? – tadman

+0

Для начала у вас есть синтаксические ошибки. Строки вставки не имеют точки с запятой. –

ответ

3

Вы можете достичь его на стороне БД без привлечения слишком много PHP.

Во-первых, вам нужно иметь UNIQUE index на колонке «LOCATION_NAME»:

CREATE UNIQUE INDEX location_name_index ON locations (location_name) 

Тогда вы всегда можете выполнить insert ignore, который добавить новые места, только если они уже не существуют:

INSERT IGNORE INTO locations (location_id, location_name) VALUES (NULL, '".$area1."') 
INSERT IGNORE INTO locations (location_id, location_name) VALUES (NULL, '".$area2."') 

Кроме того, из вашего кода неясно, есть ли у вас secured your inputs. Если у вас есть - хорошо! Если вы этого не сделали, то можете:

$query1 = sprintf("INSERT IGNORE INTO locations (location_id, location_name) VALUES (NULL, '%s')",mysql_real_escape_string($area1)); 
Смежные вопросы