PHP / MySQL使用变量和INSERT INTO语法

时间:2014-04-26 02:52:50

标签: php mysql

我正在尝试将变量值传递给MySQL数据库表。我正在使用PDO来访问数据库,并且能够回显我想要插入到浏览器的变量值。我唯一能想到的是我的语法错误。我显然是使用PHP / MySQL的新手。

我没有收到任何错误。信息不会进入我的表格。我做错了什么?

$sql = "INSERT INTO testquiz (version, points, passing_percent, gained_score, username, email, quiz_title, date)
VALUES ('$version', $points, $passing_percent, $gained_score, '$username', '$email', '$quiz_title', CURDATE() )";

查询创建表:

MySQL CREATE TABLE查询:

    CREATE TABLE testquiz (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    version TEXT,
    points INT,
    passing_percent DOUBLE,
    gained_score DOUBLE,
    username TEXT,
    email TEXT,
    quiz_title TEXT,
    date DATE NOT NULL
    ) DEFAULTCHARACTER SET utf8 ENGINE=InnoDB

2 个答案:

答案 0 :(得分:1)

使用PDO时,普遍接受的做法是使用SQL的预准备语句,它基本上是用于清理字符串输入的方法。

如果您的数据库连接对象是$dbo,那么它通常会是这样的。

通过在数据库连接对象上调用prepare方法来创建预准备语句:

$sql = $dbo->prepare("INSERT INTO testquiz (version, points, passing_percent, gained_score, username, email, quiz_title, date)
VALUES (:version, :points, :passing_percent, :gained_score, :username, :email, :quiz_title, CURDATE())");

正如您所看到的,我没有直接传递我想要的变量,而是创建了占位符。然后,在$ sql obect上调用execute方法,并将占位符的值作为键值对传递给数组。

$sql->execute(array(":version" => $version, ":points" => $points, ":passing_percent" => $passing_percent, ":gained_score" => $gained_score, ":username" => $username, ":email" => $email, ":quiz_title" => $quiz_title));

此代码传入您定义的值而不是占位符,并且在执行INSERT语句时,它会正确地转义并清理为安全性传入的变量。

http://us1.php.net/pdo.prepared-statements

答案 1 :(得分:0)

将insert语句更改为以下格式并尝试。

$sql = "INSERT INTO testquiz (version, points, passing_percent, gained_score, username, email, quiz_title, date)
VALUES ('".$version."', '".$points."', '".$passing_percent."', '".$gained_score."', '".$username."', '".$email."', '".$quiz_title."', CURDATE())";