2013-03-01 2 views
0

Я пытаюсь создать форму, которая записывается в базу данных mysql с использованием php и html. После отправки формы я получаю ошибкуЦепочки ошибок синтаксиса SQL

MySQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '', '1', '1362154007', '127.0.0.1'' at line 2

код в файл представления РНР

<?php 
require 'connection.php'; 
$ip = $_SERVER['REMOTE_ADDR']; 
$sql="INSERT INTO entries (summoner, role, level, time, ip) 
VALUES ('" . mysql_real_escape_string($_POST['summoner']) . "', " . mysql_real_escape_string($_POST['role']) . "', '" . intval($_POST['level']) . "', '" . time() . "', '" . $ip . "'"; 
if (!mysql_query($sql)) die("MySQL error: " . mysql_error()); 
echo "1 record added"; 
?> 

и код линии двух является

<?php 
$con = mysql_connect("localhost", "ratchet132", "password", "lookingforq") or die(mysql_error()); 
mysql_select_db("lookingforq", $con) or die(mysql_error()); 
header("Content-Type: text/html; charset=utf-8"); 
mysql_set_charset("utf8"); 
mb_internal_encoding("UTF-8"); 
?> 

Ошибка возникает только с целыми числами которые не представлены html-формой (хотя уровень представлен ею, но, похоже, по той же причине, что и другие, а не с формами). Я думаю, что это, вероятно, ошибка в том, как моя таблица MYSQL настроена, но я не могу понять, что я сделал неправильно. Любая помощь была бы потрясающей.

+0

У вас нет '' 'перед ролью. – str

+0

[** Пожалуйста, не используйте '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) поможет вам решить, какой из них. – Kermit

ответ

1

есть дополнительный апостроф в вашем целочисленном значении,

VALUES ('" . mysql_real_escape_string($_POST['summoner']) . "', " . mysql_real_escape_string($_POST['role']) . "', '" . intval($_POST['level']) . "', '" . time() . "', '" . $ip . "'"; 
                               ^HERE 

Мое предложение, чтобы сохранить значения в переменном первых, так что легко отлаживать код, например

$summoner = mysql_real_escape_string($_POST['summoner']); 
$role = mysql_real_escape_string($_POST['role']); 
$intV = intval($_POST['level']); 
$sTime = time(); 
$ip = $_SERVER['REMOTE_ADDR']; 
$sql="INSERT INTO entries (summoner, role, level, time, ip) 
     VALUES ('$summoner', $role, $intV, $sTime,'$ip')')"; 

Использования PDO или MySQLi, чтобы вы могли параметризовать запрос. В приведенной ниже ссылке говорится о SQL Injection, но также показано использование PDO и MySQLi Расширение.

+0

Я получаю это сейчас: 'Ошибка MySQL: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '', 1 ',' 1362154579 ',' 127.0.0.1 '' в строке 2' – ratchet132

+0

@ user2124235 см. мое обновление. –

+1

Решение *** только *** заключается в использовании связанных параметров и подготовленных операторов. Это самый близкий ответ на это решение. – Kermit

0

Почему вы заключаете INT значение в кавычках?

'" . intval($_POST['level']) . "' 
0

Вам не хватает '. Попытка:

$sql="INSERT INTO entries (summoner, role, level, time, ip) 
VALUES ('" . mysql_real_escape_string($_POST['summoner']) . "', '" . mysql_real_escape_string($_POST['role']) . "', '" . intval($_POST['level']) . "', " . time() . ", '" . $ip . "'"; 
+0

Это меня достало! : D Он решил проблему, но теперь он говорит 'Ошибка MySQL: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 2' Я думаю, что есть дополнительная запятая или что-то, что вызывает ее? Я не могу найти его, хотя – ratchet132

+0

удалил '' 'из' time() '. Попробуй. Трудно сказать, не видя настройки вашей базы данных. – SeanWM

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