使用PDO和BindParameters将表单中的数据插入MYSQL

时间:2015-09-08 05:47:40

标签: php mysql pdo

我正在尝试使用PDO和绑定参数将表单中的数据插入MYSQL数据库。我首先尝试插入没有PDO和bindParam,并且数据已成功从表单中获取并插入到数据库中,但该基本方法对SQL注入是开放的。现在我使用以下代码(请参阅下面的代码)PDO和bindParam方法,但数据没有插入到我的数据库中。

问题:我做错了什么?是否有一些语法问题不允许我将数据插入数据库?

<?php

$username = 'username';
$password = 'pass';
$host = 'localhost';
$dbname = 'db';


try {
$dbh = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if (!isset($issue, $time, $comments, $lat, $lng)) {
    die('data set error;');
}
$stmt = $dbh->prepare("INSERT INTO table1 (issue, time, comments, lat, lng) VALUES (:issue, :time, :comments, :lat, :lng)");


$params = array(':issue' => $issue,
    ':time' => $time,
    ':comments' => $comments,
    ':lat' => $lat,
    ':lng' => $lng);

if (!$stmt->execute($params)) {
    print_r($stmt->errorInfo());
    die();
}

header("Location: main.php");
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
$dbh = null;

?>
编辑:(仍然没有工作)

development:
 adapter: sqlite3
 database: db/development.sqlite3
 pool: 5
 timeout: 5000

test: &test
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

2 个答案:

答案 0 :(得分:0)

要求“找到语法问题”的问题在这里是非常重要的,因为它们产生但是在答案中猜测并且对未来的读者没有帮助。不幸的是,它从来没有足够的票来结束这样的问题。

所以,这是猜测。您尝试插入的数据变量无法定义。

答案 1 :(得分:-1)

将您的代码更改为:

$username = 'username';
$password = 'pass';
$host = 'localhost';
$dbname = 'db';


try {
    $dbh = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    if (!isset($issue, $time, $comments, $lat, $lng)) {
        die('data set error;');
    }
    $stmt = $dbh->prepare("INSERT INTO table1 (issue, time, comments, lat, lng) VALUES (:issue, :time, :comments, :lat, :lng)");


    $params = array(':issue' => $issue,
        ':time' => $time,
        ':comments' => $comments,
        ':lat' => $lat,
        ':lng' => $lng);

    if (!$stmt->execute($params)) {
        print_r($stmt->errorInfo());
        die();
    }

    header("Location: main.php");
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}
$dbh = null;