2013-03-01 104 views
0

我尝试使用php和html写入mysql数据库。提交表格后,我得到的错误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文件中的代码是

<?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 2013-03-01 16:14:37

+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 2013-03-01 16:21:49

回答

1

有你的整数值额外的单引号,

​​

我的建议是价值首先存储在变量,所以很容易调试代码,例如

$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')')"; 

使用PDOMySQLi扩展名,以便您可以参数化查询。下面的链接谈到了SQL Injection,但它也显示了PDOMySQLi扩展的用法。

+0

现在我得到这个: 'MySQL错误:您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以在第2行'',1','1362154579','127.0.0.1'附近使用正确的语法。 – ratchet132 2013-03-01 16:17:04

+0

@ user2124235查看我的更新。 – 2013-03-01 16:19:44

+1

这里只有***解决方案是使用绑定参数和准备语句。这是解决方案最接近的答案。 – Kermit 2013-03-01 16:22:32

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 2013-03-01 16:21:03

+0

从'time()'中删除了''''。现在试试。没有看到您的数据库设置很难说。 – SeanWM 2013-03-01 16:31:23