2015-01-23 7 views
0

Я довольно новичок в использовании PDO, и я пытаюсь перенести некоторые из моих сайтов с mysql_ * на него.PDO Заявления не отправляются в базу данных

Я образовал следующее:

if ($userData) { 
    $query = "SELECT * FROM table WHERE user_id = " . $db->quote($userData['id']); 
    $result = $db->query($query); 


    if ($result) { 
     while ($row = $result->fetch(PDO::FETCH_ASSOC)) { 
      if ($result->rowCount > 1) { 
       $sql = "DELETE FROM tokens WHERE `user_id` = " . $db->quote($userData['id']) . "' AND `id` != '" . $row['id']; 
       $stmt = $db->prepare($sql); 
       $stmt->execute(); 
      } 
     } 

     if (!$row) { 
      $sql = "INSERT INTO tokens SET `user_id` = " . $db->quote($userData['id']) . "', `name` = '" . $db->quote($userData['name']) . "',`access_token` = '" . $db->quote($token) . "',`alive` ='Y'"; 
      $stmt = $db->prepare($sql); 
      $stmt->execute(); 
     } else { 
      $sql = "UPDATE tokens SET `access_token` = " . $db->quote($token) . "' WHERE `id` = " . $row['id'] . ""; 
      $stmt = $db->prepare($sql); 
      $stmt->execute(); 
     } 
    } 
} 

$userData является переменной API Facebook.

Фрагмент выше выглядит хорошо для меня, но когда я просматриваю его на живом веб-сайте, информация не добавляется в базу данных.

Как бы исправить это? Будем очень благодарны любой помощи.

+3

'УДАЛЕНИЕ * от' - избавиться от звезды. Плюс, просто ради аргумента, 'table' является зарезервированным словом MySQL ;-) Вам также нужно проверить наличие ошибок/исключений. –

+2

Добавьте '$ db-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);' сразу после открытия соединения. –

+0

Могу ли я предположить, что ваша таблица не называется «таблицей»? Обратите внимание, что вы действительно должны использовать подготовленные операторы, как предназначенные, вместо того, чтобы вводить значение в запрос. Вы никогда не должны использовать цитату, вместо этого вы ставите? или: введите в свой запрос, а затем используйте bind_param, чтобы безопасно установить значение. – Levi

ответ

0

Вы упускаете апостроф

$sql = "INSERT INTO tokens SET `user_id` = <<HERE>>" . $db->quote($userData['id']) . "', `name` = '" . $db->quote($userData['name']) . "',`access_token` = '" . $db->quote($token) . "',`alive` ='Y'"; 

должно быть:

$sql = "INSERT INTO tokens SET `user_id` = '" . $db->quote($userData['id']) . "', `name` = '" . $db->quote($userData['name']) . "',`access_token` = '" . $db->quote($token) . "',`alive` ='Y'"; 

И на обновления заявление в том же месте.

+0

Хороший глаз, к сожалению, в базе данных нет строки –

0

Хорошо, я скажу вам одну вещь, пожалуйста, используйте заполнители. У меня также была та же проблема, с которой вы сейчас находитесь. Функции mysql_ устарели, поэтому разработчикам приходится использовать функции PDO или mysqli_.

Пожалуйста, проверьте код и посмотреть, работает ли он

<?php 
    if($userData) { 
     $query = "SELECT * FROM table WHERE user_id = :user_id"; 
     $result = $db->prepare($query); 
     $result->execute(array(':user_id' => $userData['id'])); 
     if ($result) { 
      while ($row = $result->fetch(PDO::FETCH_ASSOC)) { 
       if ($result->rowCount > 1) { 
       $sql = "DELETE FROM tokens WHERE `user_id` = :user_id AND `id` != :id"; 
       $stmt = $db->prepare($sql); 
       $stmt->execute(array(':user_id' => $userData['id'], ':id' => $row['id'])); 
      } 
     } 

     if(!$row) { 
      $sql = "INSERT INTO tokens SET `user_id` = :user_id, `name` = :name,`access_token` = :access_token ,`alive` ='Y'"; 
      $stmt = $db->prepare($sql); 
      $stmt->execute(array(':user_id' => $userData['id'], ':name' => $userData['name'], ':access_token' => $token)); 
     } else { 
      $sql = "UPDATE tokens SET `access_token` = :access_token WHERE `id` = :id"; 
      $stmt = $db->prepare($sql); 
      $stmt->execute(array(':access_token' => $token, ':id' => $row['id'])); 
     } 
    } 
} 
?> 
+0

Rahul, я понятия не имею, но это все еще кажется, что не подает !? –

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