0

PHPとHTMLを使用してmysqlデータベースに書き込むフォームを作成しようとしています。フォームを送信した後、エラーが発生します

MySQL エラー: SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを参照して、2 行目の near '', '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";
?>

2行目のコードは

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

PDOまたは拡張機能を使用MySQLiして、クエリをパラメーター化できるようにします。以下のリンクで説明していますが、拡張機能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 に答える