3

我正在尝试使用 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

该语句正在执行,我认为它只是没有正确绑定变量。我做错了什么?

4

2 回答 2

6

您设法混淆了绑定功能。

如果您尚未分配变量,则必须使用bindParam
bindValue只能与现有值一起使用。

此外,您应该打开错误报告

于 2013-08-28T10:23:40.150 回答
4

您不需要中间变量,您必须这样做:

$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()value 是立即绑定的,而不是即时SQLite3Stmt::bindParam()获取变量的值execute()。所以问题是执行语句时变量是空的。


记住:

  • 您不需要在变量赋值上添加括号: $a = ($b); -> $a = $b;
  • 您必须引用变量键名。否则 PHP 将尝试查找具有此名称的常量,如果它不存在则会抛出警告......但如果存在则分配一个错误的键值!$_POST[post_name]->$_POST['post_name']
于 2015-02-20T08:31:44.987 回答