2014-11-20 4 views
0

У меня есть некоторые проблемы с моим, если другое заявление, но я не могу понять, что, так как он должен работать :)если существует еще вставить PHP

Что им пытаются сделать это, что если video_title уже существуют в моя строка ничего не делает, , но если video_title не существует, вставьте значения в таблицу.

У меня есть значение marvel.mp4 в моей video_title колонке, Но она по-прежнему продолжает вставлять marvel.mp4 в качестве значения на новые строки ...

Любые идеи, почему он не работает?

 $query = $dbh->query("SELECT video_title FROM video"); 
    $q   = $query->fetch(PDO::FETCH_OBJ); 

    $video_title = "marvel.mp4"; 

     if($video_title ==$q){ 

      // Do Nothing 

     }else{ 
     $sql = "INSERT INTO video (video_title, video_cat, video_date) VALUES (:video_title, :video_cat, NOW())"; 
      $query = $dbh->prepare($sql); 
      $query->execute(array(
      ':video_title' => $video_title, 
      ':video_cat' => $video_cat 
      ));  
      } 
+1

Какой сервер SQL вы используете? Некоторые rdbms имеют более простой способ сделать это, чем другие. Я прошу, потому что, хотя вы можете сделать это так, как вы показываете выше, это не так безопасно, как все это делается на стороне db. – developerwjk

+0

Я использую Mysql, Если у вас есть другое решение, было бы здорово, если бы вы поделились им со мной :) – Dymond

+0

Ну, может быть, я неправильно понял ваш вопрос. Но если вопрос был на «update if exists, иначе insert», то MySQL имеет синтаксис для [INSERT ... ON DUPLICATE KEY UPDATE] (http://dev.mysql.com/doc/refman/5.0/en/insert -on-duplicate.html) – developerwjk

ответ

2

Оно должно быть:

if ($video_title == $q->video_title) 

При использовании PDO::FETCH_OBJ, каждый столбец является свойством объекта.

Вы также должны быть более конкретными в запросе, иначе вы просто проверяете, является ли видео первым, возвращаемым запросом.

$video_title = "marvel.mp4"; 
$stmt - $dbh->prepare("SELECT video_title FROM video WHERE video_title = :title"); 
$stmt->execute(array(':title' => $video_title)); 
$q = $stmt->fetch(PDO::FETCH_OBJ); 
+0

Спасибо, это становится все более и более ясным :) PS: В массиве отсутствует пропасть! – Dymond

0

Этот код решит вашу проблему. Я только что протестировал и запустил его, и он работает. Пожалуйста, оцените меня, если вы находите эту помощь удивительный .... Sectona

<?php 

$db = new PDO (

    'mysql:host=localhost;dbname=sectona_db;charset=utf8', 

    'root', // username 
    'tt56u' // password 

); 

?> 


<?php 

require("pdo.php"); 


$video_t=strip_tags($_POST["video_t"]); 


//check if the video title already exist in the database 


$result = $db->prepare('SELECT * FROM video where video_title = :video_title'); 

     $result->execute(array(
      ':video_title' => $video_t 
    )); 



$nosofrows = $result->rowCount(); 
if ($nosofrows == 1) 
//if ($nosofrows ==0) 
{ 
echo '<br><b><font color=red><b></b>Video Title Already exist. Do not insert</font></b><br>'; 
exit(); 
}else{ 

// insert data 

$statement = $db->prepare('INSERT INTO video(video_title,video_name) 
          values 
                (video_title,video_name)') 
$statement->execute(array( 

':video_title' => $video_t, 
':video_name' => 'Commando' 


)); 

} 

?> 
Смежные вопросы