2013-08-19 19 views
16

Próbuję napisać kwerendę aktualizacji z PDO tylko Nie mogę uzyskać mój kod do wykonania?Aktualizacja kwerendy z PDO i MySQL

try { 
$conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); 
$conn->exec("SET CHARACTER SET utf8");  // Sets encoding UTF-8 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$sql = "UPDATE `access_users` 
     (`contact_first_name`,`contact_surname`,`contact_email`,`telephone`) 
     VALUES (:firstname, :surname, :telephone, :email); 
     "; 



$statement = $conn->prepare($sql); 
$statement->bindValue(":firstname", $firstname); 
$statement->bindValue(":surname", $surname); 
$statement->bindValue(":telephone", $telephone); 
$statement->bindValue(":email", $email); 
$count = $statement->execute(); 

    $conn = null;  // Disconnect 
} 
catch(PDOException $e) { 
    echo $e->getMessage(); 
} 
+6

Zapytanie jest nieprawidłowe. Używasz składni INSERT jak. Spójrz na składnię aktualizacji tutaj: http://dev.mysql.com/doc/refman/5.0/en/update.html – vee

Odpowiedz

50
  1. składni UPDATE jest źle
  2. Prawdopodobnie oznaczało aktualizacji wiersza nie wszystkie z nich tak trzeba użyć WHERE klauzuli kierować specyficzny wiersz

Zmienić

UPDATE `access_users` 
     (`contact_first_name`,`contact_surname`,`contact_email`,`telephone`) 
     VALUES (:firstname, :surname, :telephone, :email) 

do

UPDATE `access_users` 
    SET `contact_first_name` = :firstname, 
     `contact_surname` = :surname, 
     `contact_email` = :email, 
     `telephone` = :telephone 
WHERE `user_id` = :user_id -- you probably have some sort of id 
+0

To jest świetna i prosta odpowiedź. Osobno, w jaki sposób automatycznie formatowałeś ten SQL tak czysto? – SWL

+0

@SWL Dzięki. Formatowanie odbywa się w tym przypadku ręcznie, chociaż niektóre IDE pozwalają na ustawienie reguł formatowania i automatyczne formatowanie. – peterm

+0

mogę użyć tego '' 'access_users' UPDATE SET' contact_first_name' =: imię, 'contact_surname' =: nazwisko, ' contact_email' =: e-mail, 'telephone' =: telefon WHERE' user_name' =: nazwa użytkownika "nazwa użytkownika" jest w sesji –

3

Twoja składnia aktualizacji jest niepoprawna. Proszę sprawdzić Update Syntax dla poprawnej składni.

$sql = "UPDATE `access_users` set `contact_first_name` = :firstname, `contact_surname` = :surname, `contact_email` = :email, `telephone` = :telephone"; 
5

Nie ma to nic wspólnego z używaniem PDO, tylko mylicie INSERT i UPDATE.

Oto różnica:

  • INSERT tworzy nowy wiersz. Zgaduję, że naprawdę chcesz stworzyć nowy wiersz.
  • UPDATE zmienia wartości w istniejącym wierszu, ale jeśli to co robisz prawdopodobnie należy użyć klauzuli WHERE, aby ograniczyć zmiany do określonego wiersza, bo domyślnie jest to, że ma ona zastosowanie do każdy wiersza.

Więc to będzie prawdopodobnie robić to, co chcesz:

$sql = "INSERT INTO `access_users` 
    (`contact_first_name`,`contact_surname`,`contact_email`,`telephone`) 
    VALUES (:firstname, :surname, :email, :telephone); 
    "; 

Zauważ, że ja również zmienić kolejność kolumn; kolejność kolumn musi być zgodna z kolejnością wartości w klauzuli VALUES.

MySQL obsługuje również składnię alternatywną dla INSERT:

$sql = "INSERT INTO `access_users` 
    SET `contact_first_name` = :firstname, 
    `contact_surname` = :surname, 
    `contact_email` = :email, 
    `telephone` = :telephone 
    "; 

Ta alternatywa składnia wygląda trochę bardziej jak instrukcja UPDATE, ale tworzy nowy wiersz jak wstawić. Zaletą jest to, że łatwiej jest dopasować kolumny do poprawnych parametrów.