Не могу вставить в базу данных используя php с PDO :: execute () - PullRequest
1 голос
/ 11 июля 2011

Я создал простую базу данных MySQL и пытаюсь вставить в нее некоторые тестовые данные, используя PHP.Когда я запустил метод в Firefox, я получил следующее сообщение и не могу решить эту проблему:

Предупреждение: PDOStatement :: execute () [pdostatement.execute]: SQLSTATE [HY093]: недопустимый номер параметра:

Мой метод для вставки образца в мою базу данных:

public function confirmInsert(){
    $admin="admin";
    $pass="12345v";
    $mail="admin@example.com";  
    $insertSQL = "INSERT INTO 'users' ('user_name', 'user_pass, 'user_email')
            VALUES (
                    :admin, 
                    :pass,
                    :mail)";
    try {

        $stmt = $this->db->prepare($insertSQL);
        $stmt ->bindParam(':user_name',$admin, PDO::PARAM_STR);
        $stmt ->bindParam(':user_pass', $pass, PDO::PARAM_STR);
        $stmt->bindParam(':user_email', $mail,PDO::PARAM_STR);
        $stmt->execute();
        $stmt->closeCursor();
        return TRUE;
        } catch (Exception $e) {
            $e -> getMessage();
        }
}

Я работаю на // localhost и использую apache 2.2 и php 5.2.17.Спасибо !!

Ответы [ 2 ]

3 голосов
/ 11 июля 2011

'У вас нет одинакового имени для ваших параметров в запросе и при их привязке. Вы также должны удалить кавычки вокруг имени поля в запросе.

Так должно быть лучше:

public function confirmInsert(){
    $admin='admin';
    $pass='12345v';
    $mail='admin@example.com';  
    $insertSQL = "INSERT INTO users (user_name, user_pass, user_email)
            VALUES (
                    :admin, 
                    :pass,
                    :mail)";
    try {

        $stmt = $this->db->prepare($insertSQL);
        $stmt ->bindParam(':admin',$admin, PDO::PARAM_STR);
        $stmt ->bindParam(':pass', $pass, PDO::PARAM_STR);
        $stmt->bindParam(':mail', $mail,PDO::PARAM_STR);
        $stmt->execute();
        $stmt->closeCursor();
        return TRUE;
        } catch (Exception $e) {
            $e -> getMessage();
        }
}
0 голосов
/ 12 июля 2011

У меня пока нет прав комментировать, поэтому я должен опубликовать это как ответ.

RE Ответ Pompom6784, используя bindParam() имя переменной не обязательно должно соответствовать параметру:

$stmt->bindParam(':user_name', $admin, PDO::PARAM_STR);

Должно работать нормально.

Вы обязываете :user_name принять только переменную с именем $admin

.. если этонемного понятнее.

Если вам нужна дополнительная информация по этой теме, прочитайте хорошую статью:

Почему вы должны использовать PDO PHP для доступа к базе данных

Включает примеры, где необходимо иметь совпадающие имена переменных и заполнителей.

...