Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将准备好的语句与SQLite3和PHP一起使用_Php_Sqlite_Prepared Statement_Prepare - Fatal编程技术网

将准备好的语句与SQLite3和PHP一起使用

将准备好的语句与SQLite3和PHP一起使用,php,sqlite,prepared-statement,prepare,Php,Sqlite,Prepared Statement,Prepare,我试图在PHP中使用SQLite3向数据库添加数据。我在没有准备声明的情况下让它工作,但现在我正在努力使它更安全。我没有使用PDO 到目前为止,以下代码不起作用。它只是将单词“:name”和“:email”插入数据库,而不是它们的绑定值: $smt = $db->prepare("insert into names (name, email) values (':name', ':email')"); $smt->bindValue(':name', $var_name); $smt

我试图在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\u name
$var\u email


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

您设法混淆了绑定函数

如果尚未指定变量,则必须使用bindParam
bindValue只能与现有值一起使用


此外,您应该在

上打开错误报告。您不需要中间变量,必须执行以下操作:

$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();
如中所述,value立即绑定,而不是在
execute()
时间获取变量的值。所以问题是,当执行语句时,变量是空的


记住:

  • 您不需要在变量赋值上添加括号:$a=($b);->$a=b美元
  • 必须引用变量键名称。否则PHP将尝试查找具有此名称的常量,如果它不存在,将抛出警告。。。但如果存在,将分配错误的键值<代码>$\u POST[POST\u name]->
    $\u POST['POST\u name']

也许,添加一种类型的数据会有所帮助:SQLITE3\u文本?不过,这是可选的。是的,我忘了提到我也试过了,谢谢,等等,execute在使用PDO时只接受参数,我在问题中说我没有使用PDO。。在没有PDO的情况下,我如何让它工作?那么,请阅读前面提到的函数描述并正确使用它们