INSERT INTO语句不起作用

时间:2015-12-15 17:36:03

标签: php mysql database mysqli

我是PHP / SQL编码的新手,我完全不知道为什么这个编码不起作用。数据库本身是由我的大学制作的,所以我只是想连接它(我不确定我是否能够放弃细节,所以我把连接编码拿出来。我处于基本级别所以重要的技术语言将超越我的头脑,但任何建议将不胜感激!

我正在尝试将链接到PHP文件的表单中的结果插入到数据库表中。我不确定我是否需要在PHP文件中放置任何内容来说明这一点?但这是我的代码:

<?php
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
   die("Connection failed: " . $conn->connect_error);
} 
echo "Connected successfully";
// Connect to database
$sql = "SELECT runnerid, position, eventid, date, finishtime, categoryid,  agegrade, pb FROM Results";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
    { 
        echo "<table>";
        echo '<table border=1><tr><th>Runner ID</th><th>Position</th><th>Event ID</th><th>Date</th><th>Finish Time</th><th>Category ID</th><th>Age Grade</th><th>Personal Best</th></tr>';
        echo "<tr><td>";
        echo $row['runnerid'];
        echo "</td><td>";
        echo $row['position'];
        echo "</td><td>";
        echo $row['eventid'];
        echo "</td><td>";
        echo $row['date'];
        echo "</td><td>";
        echo $row['finishtime'];
        echo "</td><td>";
        echo $row['categoryid'];
        echo "</td><td>";
        echo $row['agegrade'];
        echo "</td><td>";
        echo $row['pb'];
        echo "</td>
        </tr>";

    }
    echo "</table>";
}
} else {
 echo "0 results";
}

$sql = "INSERT INTO Results VALUES ('$_POST[runnerid]', '$_POST[position]' '$_POST[eventid]' '$_POST[date]' '$_POST[finishtime]' '$_POST[categoryid]' '$_POST[agegrade]' '$_POST[pb]')";

$result = $conn->query($sql);
if (!$result) {
    die('Could not insert data' . mysql_error()); 
}
$conn->close();
?>

我甚至尝试过没有$_POST编码的代码来添加新数据,但这也没有用。

4 个答案:

答案 0 :(得分:6)

没有人提到的是,鉴于您的代码,我可以轻松地用一个请求消灭整个数据库。以下是您需要采取的措施来防范SQL injection attacks

$sql = "INSERT INTO Results VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('iiississ', $_POST["runnerid"], $_POST["position"], $_POST["eventid"], $_POST["date"], $_POST["finishtime"], $_POST["categoryid"], $_POST["agegrade"], $_POST["pb"]);
$result = $stmt->execute();
if (!$result) {
    die('Could not insert data: ' . $conn->error); 
}

Read up on prepared statements

  

绑定变量与查询分开发送到服务器,因此不会干扰它。在解析语句模板之后,服务器直接在执行点使用这些值。绑定参数不需要进行转义,因为它们永远不会直接替换为查询字符串。必须为服务器提供绑定变量类型的提示,以创建适当的转换。

答案 1 :(得分:3)

如果你很好地缩进你的代码,你会更容易看到错误。

  • 您有不匹配的花括号

  • 您的查询语法错误,即参数

  • 之间缺少逗号
  • 如果您使用""围绕变量名称,变量将在{}字符串中更好地替换。

  • 您需要在while循环之外移动<table>并移除第二个<table....代码

  • 表格标题在循环之外也会更好

  • 您还在使用mysql_error()但是您实例化了一个mysqli_对象,不允许混合扩展。请改用$conn->error

  • 另见@ miken32回答建议使用绑定变量。

以下是一些建议修复: -

<?php
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
   die("Connection failed: " . $conn->connect_error);
} 
echo "Connected successfully";
// Connect to database
$sql = "SELECT runnerid, position, eventid, date, 
               finishtime, categoryid,  agegrade, pb FROM Results";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row

    echo '<table border="1">
         <tr><th>Runner ID</th><th>Position</th><th>Event ID</th>
             <th>Date</th><th>Finish Time</th><th>Category ID</th>
             <th>Age Grade</th><th>Personal Best</th>
         </tr>';

    while($row = $result->fetch_assoc()) {
    { 
        echo "<tr><td>";
        echo $row['runnerid'];
        echo "</td><td>";
        echo $row['position'];
        echo "</td><td>";
        echo $row['eventid'];
        echo "</td><td>";
        echo $row['date'];
        echo "</td><td>";
        echo $row['finishtime'];
        echo "</td><td>";
        echo $row['categoryid'];
        echo "</td><td>";
        echo $row['agegrade'];
        echo "</td><td>";
        echo $row['pb'];
        echo "</td>
        </tr>";

    }
    echo "</table>";

// } remove extra barckey

} else {
 echo "0 results";
}

$sql = "INSERT INTO Results 
          VALUES ('{$_POST['runnerid']}', '{$_POST['position']}', 
                  '{$_POST['eventid']}', '{$_POST['date']}', 
                  '{$_POST['finishtime']}' '{$_POST['categoryid']}',
                  '{$_POST['agegrade']}', '{$_POST['pb']}')";

$result = $conn->query($sql);
if (!$result) {
    die('Could not insert data' . $conn->error); 
}
$conn->close();
?>

答案 2 :(得分:-2)

WebSecurityConfigurerAdapter

答案 3 :(得分:-3)

兄弟,你忘了,每个价值之后。如果你在sql查询中直接从post中获取任何值,那么它将在'“。$ _ post。”'或“'。$ _ post。'之间。”一个条件将适合看到您将理解的以下查询。

一切顺利......

如果有任何问题,请评论plz。让我知道我会解决

必须如下:

 $sql = "INSERT INTO Results VALUES ('".$_POST[runnerid]."', '".$_POST[position]."', '".$_POST[eventid]."', '".$_POST[date]."', '".$_POST[finishtime]."', '".$_POST[categoryid]."', '".$_POST[agegrade]."', '".$_POST[pb]."')";