2012-05-12 7 views
-1

Привет У меня есть таблицы в MySQL есть шесть полейPDO базы данных вставить

ID, mobileNumber, firstName, lastName, email, password , rollID 

идентификатор автоинкремент и я хочу, чтобы вставить его с помощью PHP

PHP код

public function run($firstName, $lastName, $mobileNumber, $email, $password, $rePassword) { 
     if (!$this->db->isExistedMobile($mobileNumber)) { 
      try { 
       $query = "INSERT INTO user (firstName, lastName, mobileNumber, email, password, rollID) 
       VALUES (:firstName, :lastName, :mobileNumber, :email, :password, 'rollID')"; 
       $sth = $this->db->prepare($query); 
       $sth->execute(array(
        ':firstName' => $firstName, 
        ':lastName' => $lastName, 
        ':mobileNumber' => $mobileNumber, 
        ':email' => $email, 
        ':password' => $password, 
        ':rollID' => "roma" 
       )); 
       header("location: " . URL . "index"); 
      } catch (PDOException $e) { 
       die($e->getMessage()); 
       exit; 
      } 
     } else { 
      include 'controlers/Error.php'; 
      $error = new Error(); 
      $error->index("you enterd a used mobile number"); 
     } 
    } 

я есть это исключение

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens 

функция isExistedMobile всегда возвращает false, поэтому не беспокойтесь об этом, я не знаю, где это неправильно, это в синтаксисе? или в rollID cos i сделать его статическим? спасибо за помощь :)

+0

-2? Почему так ? ? ? –

+0

Я хочу, чтобы ddd был статичным –

+1

(я не спускал вниз). Можете ли вы объяснить, что происходит не так? Один * предполагает * запись не вставляется в базу данных, как ожидалось, но вы на самом деле не говорите об этом. Или, возможно, это перенаправление, которое работает не так, как ожидалось? Нотабене Стоит установить '$ this-> db-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);' во время отладки, чтобы выводились ошибки PDO. – eggyal

ответ

2

Проблемы (с your original code) было то, что массив параметров был Запятая, который создал дополнительный null элемент в нем.

Я рекомендовал бы возвращаться к этой версии (с буквальным значением rollID), как первоначально предполагалось, но убедитесь, что вы удалите Запятая после $password:

public function run($firstName, $lastName, $mobileNumber, $email, $password, $rePassword) { 
     if (!$this->db->isExistedMobile($mobileNumber)) { 
      $query = "INSERT INTO user (firstName, lastName, mobileNumber, email, password, rollID) 
       VALUES (:firstName, :lastName, :mobileNumber, :email, :password, 'ddd')"; 
      $sth = $this->db->prepare($query); 
      $sth->execute(array(
       ':firstName' => $firstName, 
       ':lastName' => $lastName, 
       ':mobileNumber' => $mobileNumber, 
       ':email' => $email, 
       ':password' => $password // , removed from here 
      )); 
      header("location: " . URL . "index"); 
     } else { 
      include 'controlers/Error.php'; 
      $error = new Error(); 
      $error->index("you enterd a used mobile number"); 
     } 
    } 
+0

, дайте мне правильный запрос и спасибо –

+0

Мне нужно, чтобы rollID был статическим, а его значение «roma» –

+1

@WilliamKinaan: У вас был правильный запрос в начале; вам просто нужно удалить лишние ','. – eggyal

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