Оператор INSERT INTO php mysql не работает из-за неправильного синтаксиса.

Попытка выяснить, почему следующий код вызывает эту ошибку.

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «имя пользователя», «пароль») ЗНАЧЕНИЯ («Pangamma», «39ef1e6d2fb0743000e5956362b6dc55» в строке 1

Пароль, электронная почта и пользователь все правильно. Как и настройки базы данных. Я уже 3 часа бьюсь головой о стену. Наверное, что-то до безобразия простое. Что я делаю не так?

/** returns a reason if it fails **/
        function addUser($user,$password,$email){
            global $db_database;global $tb_logins;global $tb_info; global $tb_licenses;
            $licensekey = md5($user.$password.$email);
            $hash = md5($user.'please'.$password.'the salt');
            if (mysql_num_rows(mysql_query("SELECT * FROM ".$tb_logins." WHERE username='$user'")) > 0){
                return 'error : username already in use.';
            }
            mysql_query("INSERT INTO `$db_database`.`$tb_logins` ( 'username' , 'password' ) VALUES ('$user', '$hash')") or die(mysql_error());
            mysql_query("INSERT INTO $tb_info (`username`,`email`,`licensekey`,`limit`) VALUES ('".$user."','".$email."','".$licensekey."','0')") or die(mysql_error());
            return 'success!';
        }

person Pangamma    schedule 10.09.2013    source источник
comment
Одно return 'success!'; ничего не будет эхом. Используйте echo 'success!'; или die("success!"); или exit("success!");   -  person Funk Forty Niner    schedule 10.09.2013


Ответы (4)


Одинарная кавычка (') используется только для значений, а не для выбора столбцов.

вы можете использовать backtik (`), как показано ниже

mysql_query("INSERT INTO `$db_database`.`$tb_logins` (`username` ,`password`) VALUES ('$user', '$hash')") or die(mysql_error());

ИЛИ вы можете разместить его без ничего

mysql_query("INSERT INTO `$db_database`.`$tb_logins` (username ,password) VALUES ('$user', '$hash')") or die(mysql_error());

И для второго запроса вы использовали limit в качестве имени столбца. Пожалуйста, не используйте его, потому что это ключевое слово SQL. Таким образом, это даст вам синтаксическую ошибку.

person Parixit    schedule 10.09.2013
comment
Кажется, это работает. Я приму ваш ответ через три минуты (минимально разрешенное время). - person Pangamma; 10.09.2013
comment
Теперь эта линия доставляет мне неприятности. Я применяю предложенное вами исправление, поэтому второе тоже должно работать. Это не так. mysql_query(INSERT INTO $db_database.$tb_logins (имя пользователя, пароль) VALUES('$user', '$hash')) или die(mysql_error()); - person Pangamma; 10.09.2013
comment
У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'limit) VALUES ("Pangamma2", "[email protected]", "e9e02ef638ddc9db6bec0dbee" в строке 1 - person Pangamma; 10.09.2013
comment
Пожалуйста, предоставьте запрос. Это то же самое, что и в вопросе? - person Parixit; 10.09.2013
comment
Запрос: mysql_query(INSERT INTO $db_database.$tb_info (имя пользователя, электронная почта, лицензионный ключ, ограничение) VALUES ('$user', '$email', '$licensekey', '0')) или die(mysql_error()); - person Pangamma; 10.09.2013
comment
Но вы столкнулись с ошибкой для второго запроса. Так что проблема не в этом. Используйте это для второго запроса: mysql_query(INSERT INTO $db_database.$tb_info (username,email,licensekey,limit) VALUES('$user','$email','$licensekey','0')) или die(mysql_error() ); - person Parixit; 10.09.2013
comment
Это не работает для второго запроса. Я думаю, что могу принять ваш первый ответ. - person Pangamma; 10.09.2013
comment
Либо вы можете удалить ' из предельного значения, например использовать только 0. mysql_query(INSERT INTO $db_database.$tb_info (username,email,licensekey,limit) VALUES('$user','$email','$licensekey',0)) или умереть (mysql_error()); - person Parixit; 10.09.2013
comment
Оказывается, проблема заключалась в том, что лимит не был заключен в back кавычки. Без обратных кавычек это означало LIMIT #, как и в конце запроса. Поскольку я все еще нахожусь в процессе настройки таблиц, я собираюсь переименовать столбец, чтобы избежать путаницы в будущем. Спасибо за всю твою помощь, чувак. - person Pangamma; 10.09.2013

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

INSERT INTO `$db_database`.`$tb_logins` ( 'username' , 'password' )

должно быть

INSERT INTO `$db_database`.`$tb_logins` ( `username` , `password` )
person Yogesh Suthar    schedule 10.09.2013

Измените свой первый оператор mysql_query на это:

mysql_query("INSERT INTO '$db_database'.'$tb_logins' ( username , password ) VALUES ('$user', '$hash')") or die(mysql_error());
person Vimal Bera    schedule 10.09.2013

Изменить эту строку

mysql_query("ВСТАВЬТЕ В $db_database.$tb_logins ('имя пользователя', 'пароль') ЗНАЧЕНИЯ ('$user', '$hash')") или die(mysql_error());

to

    mysql_query("INSERT INTO `$db_database`.`$tb_logins` ( `username` , `password` ) VALUES ('$user', '$hash')") or die(mysql_error());
person rams0610    schedule 10.09.2013