2013-04-30 3 views
1

Я пытаюсь выполнить класс регистра. Но запрос не работает (запрос подсвечивается. Кажется, это простая проблема, но я ее не вижу. Я повторяю запрос и копирую и выполнить его с помощью PHPMyAdmin SQL поля запроса, это говорит об ошибке 1064. Я не могу найти никаких проблем с ним.Почему мой запрос не работает для mysql? Синтаксис кажется правильным

<?php 
class register 
{ 
    protected $username; 
    protected $password; 
    protected $email; 
    protected $postcode; 

    public function __construct() 
    { 
    } 

    public function insertuser($username, $password,$email, $postcode) 
    { 
     $this->_email = mysql_real_escape_string($email); 
     $this->_password = mysql_real_escape_string($password); 
     $this->_username = mysql_real_escape_string($username); 
     $this->_postcode = mysql_real_escape_string($postcode); 



    **$query = "INSERT INTO 'users'('user_id', 'username', 'password', 'email', 'postcode') VALUES (NULL,'{$username}','{$password}','{$email}','{$postcode}');";** 


     echo $query; 
     $result = mysql_query($query); 
     return $result; 
    } 


} 
?> 
+0

Вы используете неправильные цитаты. Также вы не должны использовать обычный mysql, а не изучать mysqli или PDO. – Tomanow

+1

Я все время вижу этот тип вопроса, вы должны прочитать [обычную отладку базы данных для PHP и MySQL] (http://jason.pureconcepts.net/2013/04/common-debugging-php-mysql/). –

+1

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (http://j.mp/XqV7Lp). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http: // php.net/pdo) или [MySQLi] (http://php.net/mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ). – ceejayoz

ответ

1

error 1064 означает ошибку синтаксиса SQL. Вы использовали одиночные кавычки вокруг имени таблицы и столбец имена:. ' Замените их backtics: `

"INSERT INTO `users` (
    `user_id`, `username`, `password`, `email`, `postcode` 
) VALUES (
    NULL,'{$username}','{$password}','{$email}','{$postcode}' 
);" 

Дополнительная записка, что вы должны не t написать новый код с помощью расширения mysql. Он был отмечен устаревшими разработчиками PHP. Вместо этого используйте PDO или mysqli.

0

Синтаксис кажется неправильным. Имена таблиц и столбцов не должны содержать кавычек. У них должны быть обратные или ничего. В противном случае они рассматриваются как строковые литералы.

INSERT INTO users (user_id, username, password, email, postcode) 
VALUES (NULL,'{$username}','{$password}','{$email}','{$postcode}') 

Вам также не нужен список полей, если список значений завершен и в порядке. Конечная точка с запятой нежелательна (хотя и неэффективна).


Ваш код уязвим для инъекций. Вы должны использовать правильно параметризованные запросы с PDO или mysqli

0

У вас есть одинарные кавычки вокруг вашей таблицы и столбцов. Вы вводите их в заблуждение с помощью обратных ссылок - которые не нужны, если вы не использовали reserved word (что вам следует избегать ИМО).

Кроме того, вы не использовали ваши дезинфицированные переменные и поэтому уязвимы для SQL injection.

INSERT INTO users (user_id, username, password, email, postcode) VALUES (NULL,'{$this->_username}','{$this->_password}','{$this->_email}','{$this->_postcode}'); 

Обязательно: В mysql_* функции будут deprecated in PHP 5.5. Не рекомендуется писать новый код, поскольку он будет удален в будущем. Вместо этого либо MySQLi, либо PDO и be a better PHP Developer.

+0

Одиночные кавычки вокруг имен столбцов всегда ошибочны. Если вы хотите заключить имена столбцов, вы должны использовать обратные ссылки. – Arjan

+0

Похоже, что я оставил линию обратной линии. См. Обновление. –

0

Вы должны обязательно рассмотреть возможность переключения на mysqli в дополнение к использованию подготовленных операторов. Использование подготовленных операторов упростит ваши запросы и еще больше защитит вас от инъекций.

См http://php.net/manual/en/mysqli.prepare.php

Как для ошибок, есть несколько вещей неправильно. Не вызывайте БД с помощью кавычек. Не обрабатывайте имена таблиц кавычками. Это все, что указано в «Взрывных таблетках».

Наконец, я не вижу, где вы открыли соединение mysqli.

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