【问题标题】:Using PHP to insert data into a MySQL Database [closed]使用 PHP 将数据插入 MySQL 数据库 [关闭]
【发布时间】:2013-08-20 01:40:23
【问题描述】:

我正在尝试创建一个自提交页面,该页面将创建一个供用户填写的表单。信息将存储在 MySQL 数据库中。该表单似乎正在工作,但由于某种原因,我无法将表单中的信息插入数据库。这是我所拥有的:

<!DOCTYPE html>
<html>
    <head>
        <title>MySQL Test</title>
    </head>
    <body>
        <h1>MySQL Test</h1>
        <?php

        if($_SERVER["REQUEST_METHOD"] == "GET") {
            ?>
            <form action="" method="post">
                <input type="text" name="name" placeholder="Name" /><br />
                <input type="submit" value="Send" />
            </form>
            <?php
        } else if ($_SERVER["REQUEST_METHOD"] == "POST") {
            $name = $_POST["name"];
            $server = new PDO("mysql:dbname=test;host=localhost", "root", "root");
            $server->execute("INSERT INTO test ('name') VALUES $name;");
        }

        ?>
    </body>
</html>

我应该改变什么?

【问题讨论】:

  • 拜托,学习使用prepared statements
  • 您收到什么错误信息?
  • 尝试在 INSERT 语句中引用 $name
  • 我没有收到任何错误,只是 MySQL 数据库表中没有数据。
  • 为了更好地了解您的代码,您应该将其包装在 try/catch 中,例如:try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e) { echo 'Connection failed: ' . $e-&gt;getMessage(); }

标签: php html mysql forms


【解决方案1】:

您的插入应该如下所示:

$name = $_POST["name"];
$server = new PDO("mysql:dbname=test;host=localhost", "root", "root");
$stmt = $server->prepare("INSERT INTO test (name) VALUES (:name)");
$stmt->bindParam(':name', $name);
$stmt->execute();

【讨论】:

  • +1 表示准备好的语句。
【解决方案2】:

请像这样插入:

$name = "john";
$query = "INSERT INTO test(col) VALUES(:name);";
$statement = $server->prepare($query);
$statement->execute(array(":name" => $name));

这是使用prepared statements 调用的,它非常简单并且可以避免sql-injection。您可以在查询中的多个列上执行多个变量,方法是在每个 ":col" => $colVal 之后用逗号分隔,但这里不需要这样做,只是一个提示。

您也可以这样做以进行更新。

记得检查你被插入的值是否为空。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2015-03-25
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    相关资源
    最近更新 更多