Возникла ошибка при выполнении моего запроса - PullRequest
0 голосов
/ 21 августа 2011

Хорошо, я создаю систему регистрации для моего сайта, но у меня возникают проблемы при выполнении моего запроса.Я пытался решить проблему, но у меня не было успеха.Вид сбитого с толку: (

Вот мой код:

public function registerUser($username, $password, $email) {
            global $core;
            if(empty($username) || empty($password) || empty($email)) {
                throw new Exception ('A required field was left blank');
            } else {
                //SQL Query Data
                $data['username'] = $username;
                $data['password'] = $core->encrypt($password);
                $data['email'] = $email;
                $data['userKey'] = rand(999999, 100000);
                $data['ip'] = $_SERVER['REMOTE_ADDR'];
                $data['date'] = time();

                //SQL Query
                $sql = "INSERT INTO `u_userdata` ('user-key', 'username', 'password', 'email', 'register-ip', 'register-date') VALUES (:userKey, :username, :password, :email, :ip, :date)";
                $STH = $this->DBH->query($sql);
                $STH->execute($data);
            }
        }

и вот ошибка, которую я получаю:

Fatal error: Call to a member function execute() on a non-object in C:\xampp\htdocs\community\inc\user.inc.php on line 33

Я предполагаю, что этоошибка с запросом, но я не уверен, что!

Ответы [ 3 ]

1 голос
/ 21 августа 2011

Я думаю, у вас есть PDO :: prepare () , смешанный с PDO :: query () :

Должно быть либо:

$result = $this->DBH->query($sql);

Или:

$STH = $this->DBH->prepare($sql);
$STH->execute($data);

Из документов:

PDO :: query () выполняет оператор SQL в одном вызове функции, возвращая результирующий набор (если есть), возвращаемый оператором как PDOStatement объект.

Обычно вы используете PDO :: prepare () , если вы собираетесь выполнять один и тот же оператор несколько раз, или если вам нужно связать параметры. Насколько мне известно, невозможно привязать параметры к вашему запросу до использования PDO :: query () .

Обратите внимание, что с PDO :: prepare () вы можете использовать PDOStatement :: bindParam () для привязки параметров перед вызовом PDOStatement-> execute () , или вы можете передать параметры в виде массива в PDOStatement-> execute () .

Вам также необходимо добавить префикс ключей массива к двоеточию. Таким образом, конечный результат будет:

$data[':username'] = $username;
$data[':password'] = $core->encrypt($password);
$data[':email'] = $email;
$data[':userKey'] = rand(999999, 100000);
$data[':ip'] = $_SERVER['REMOTE_ADDR'];
data[':date'] = time();

//SQL Query
$sql = "INSERT INTO `u_userdata` ('user-key', 'username', 'password', 'email', 'register-ip', 'register-date') VALUES (:userKey, :username, :password, :email, :ip, :date)";
$STH = $this->DBH->prepare($sql);
$STH->execute($data);
0 голосов
/ 21 августа 2011

функция query () выполняет оператор sql. Вы должны использовать функцию prepare (). я предполагаю, что вы используете pdo из-за тега pdo

    $data[':username'] = $username;
    $data[':password'] = $core->encrypt($password);
    $data[':email'] = $email;
    $data[':userKey'] = rand(999999, 100000);
    $data[':ip'] = $_SERVER['REMOTE_ADDR'];
    $data[':date'] = time();

    //SQL Query
    $sql = "INSERT INTO `u_userdata` ('user-key', 'username', 'password', 'email', 'register-ip', 'register-date') VALUES (:userKey, :username, :password, :email, :ip, :date)";
    $stmt = $this->DBH->prepare($sql);
    $stmt->execute($data);
0 голосов
/ 21 августа 2011

Вы должны использовать `quote вместо 'в запросе вставки.

"INSERT INTO u_userdata (user-key, username, password, email, register-ip, register-date). ,: дата)

...