0

我正在尝试使用 php 和 html 写入 mysql 数据库的表单。提交表单后,我收到错误

MySQL 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 ''、'1'、'1362154007'、'127.0.0.1'' 附近使用正确的语法

提交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 表的错误,但我无法弄清楚我做错了什么。任何帮助都是极好的。

4

3 回答 3

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

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

于 2013-03-01T16:15:11.633 回答
0

为什么将 int 值用引号括起来?

'" . intval($_POST['level']) . "'
于 2013-03-01T16:15:13.930 回答
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 . "'"; 
于 2013-03-01T16:15:21.300 回答