2010-08-22 2 views
1

Мне было интересно, как я могу проверить значение из массива, чтобы увидеть, если его в базе данных, если он еще не добавлен в базу данных. Как я могу это сделать, используя PHP & MySQL?PHP & MySQL question

PHP-код.

for ($x = 0; $x < count($cat_id); $x++){ 
    $cat_query = "INSERT INTO posts_categories (category_id, post_id, date_created) VALUES ('" . mysqli_real_escape_string($mysqli, strip_tags($cat_id[$x])) . "', '" . mysqli_real_escape_string($mysqli, strip_tags($post_id)) . "', NOW())"; 
} 

Редактировать код PHP.

if(isset($cat_id)){ 

     for($x = 0; $x < count($cat_id); $x++){ 
      $check_query = mysqli_query($mysqli,"SELECT category_id FROM posts_categories WHERE category_id = '" . $cat_id[$x] ."' AND post_id = '" . $post_id . "'"); 

      if ($check_query == TRUE) { 
       unset($cat_id[$x]); 
      } 
     } 


     for($x = 0; $x < count($cat_id); $x++){ 
      $cat_query = "INSERT INTO posts_categories (category_id, post_id, date_created) VALUES ('" . mysqli_real_escape_string($mysqli, strip_tags($cat_id[$x])) . "', '" . mysqli_real_escape_string($mysqli, strip_tags($post_id)) . "', NOW())"; 
     } 
    } 

ответ

1

Вы можете использовать INSERT .. ON DUPLICATE UPDATE.

+0

Будет ли это мешать мне добавлять или обновлять строку таблицы? – help

+0

Нет, он сообщает MySql, что вы хотите вставить строку, но если она уже существует (как определено для первичного ключа, который в этом случае, вероятно, должен быть 'category_id' +' post_id'), он не должен пытаться вставить новую запись, но вместо этого обновите существующий. Обычно вы обновляете столбец 'updated_at' или аналогичный в части обновления запроса. – troelskn

+0

Я хочу прекратить добавлять или обновлять строку таблицы с повторяющимся значением. – help

0
$sql = "SELECT * FROM your_table WHERE your_column='".$yourArray['value']."'"; 
if(!mysql_num_rows(mysql_query($sql))){ 
    // no rows so add it to the database... 
} 
+0

не работал для меня :( – help

+0

Вы можете разместить код, который вы использовали здесь, пожалуйста? –

+0

новый опубликованный код не является точным соответствием вашего кода, где я нахожусь в правильном понимании при попытке новых вещей. – help

1

Как вы используете MySQLi вы должны probabaly использовать подготовленные заявления (как с безопасностью и производительностью точки зрения)

$stmt = $mysqli->prepare("INSERT IGNORE INTO posts_categories (category_id, post_id, date_created) VALUES (?, ?, ?)"); 

// Should use a prepared statement here. 
foreach ($categories as $key => $cat) { 

    // Bind params 
    $stmt->bind_param('iis', $cat, $post_id, 'NOW()'); 

    // Exectute the query 
    $stmt->execute(); 
} 

// Close the connection! 
$mysqli->close(); 

ПРИМЕЧАНИЕ: Я также использовал INSERT IGNORE, так что вставка будет молча терпеть неудачу, если ключ существует.