我正在尝试将变量值传递给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
答案 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语句时,它会正确地转义并清理为安全性传入的变量。
答案 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())";