我正在尝试使用PHP中的SQLite3将数据添加到数据库中。我没有准备好的陈述让它工作,但现在我想让它更安全。我没有使用PDO。
到目前为止,以下代码无效。它只是将“:name”和“:email”插入数据库,而不是它们的绑定值:
$smt = $db->prepare("insert into names (name, email) values (':name', ':email')");
$smt->bindValue(':name', $var_name);
$smt->bindValue(':email', $var_email);
$var_name = ($_POST[post_name]);
$var_email = ($_POST[post_email]);
$smt->execute();
所以我首先想到这是因为我在准备好的声明中有:name
和:email
的单引号。所以我拿出来了。现在,当我发布表单时,它只是将空白条目放入数据库,它不会插入$var_name
和$var_email
语句是正在执行,它只是没有正确绑定变量我不认为。我做错了什么?
答案 0 :(得分:5)
您设法混淆了绑定功能。
如果您尚未分配变量,则必须使用 bindParam 。
虽然 bindValue 必须仅与现有值一起使用。
此外,您应该启用错误报告
答案 1 :(得分:3)
您不需要中间变量,您必须这样做:
$smt = $db->prepare("insert into names (name, email) values (':name', ':email')");
$smt->bindValue(':name', $_POST['post_name'], SQLITE3_TEXT);
$smt->bindValue(':email', $_POST['post_email'], SQLITE3_TEXT);
$smt->execute();
正如SQLite3Stmt::bindValue()
中记录的那样,值会立即绑定,而不是SQLite3Stmt::bindParam()
,它会在execute()
时获取变量的值。所以问题是当执行语句时变量是空的。
记住:
$_POST[post_name]
- > $_POST['post_name']