bindParam(1, $-6ren">
gpt4 book ai didi

php - 无法通过 php PDO 插入 SQLite 数据库

转载 作者:可可西里 更新时间:2023-11-01 00:52:19 25 4
gpt4 key购买 nike

请帮忙看看哪里出了问题....(我测试了数据库连接没问题)

<?php
$user_name=$_POST['user_name'];
$password=$_POST['password'];

$dbh=new PDO('sqlite:./db/user.db') or die("fail to connect db");

try{
$stmt = $dbh->prepare("INSERT INTO user_info VALUES (?, ?)");
$stmt->bindParam(1, $a);
$stmt->bindParam(2, $b);
$a=$user_name;
$b=$password;
$stmt->execute();
}
catch(PDOException $e) {echo $e->getMessage();}

?>

最佳答案

在评论中与@DerrickCoetzee 讨论后,我有时间重新考虑这个答案。事实是,答案实际上可能是在某些 服务器上解决此问题的唯一方法。我曾建议授予对数据库的通用写访问权限,这无疑是不安全的。我发现,为什么这是我唯一的解决方案,原因是我的服务器禁用了 php 的写访问权限。 php 无法创建新文件,并且我无法在没有 root 访问权限的情况下将数据库的所有者更改为 apache 或“nobody”,这使得更好的解决方案变得不可能。

本质上,我的服务器已经锁定了 php,因此它只能在 每个人 都可以写入的情况下写入。在我看来,这是一个糟糕的服务器设置,导致了这种安全风险,正如@Derrick 所建议的那样,sqlite 数据库应该只用于私有(private)用途或仅供服务器访问。有些系统未设置为安全地利用此功能。如果您发现 php 没有写权限并且您没有机器的 root 权限,您应该考虑联系您的系统管理员或切换到 MySQL(如果可用)。

话虽这么说,但我发现以下解决方案对于快速原型(prototype)设计解决方案非常方便,当数据库不敏感或只有一小部分人知道时。


我之前的回答:

我今天遇到了同样的问题!我对 php 和 sqlite 很陌生,但一直在努力。突然间,我遇到了这个巨大的障碍(一天没有进展),因为没有像问题张贴者所描述的那样插入到我的 sqlite 数据库中。这里的区别因素是没有错误消息或异常,如果将执行语句放入 if 子句中,只会返回 false。

所以,我终于找到了一种让插入起作用的方法,但我不能 100% 确定它是否安全。如果您认为有更好的方法,我将不胜感激。

主要问题是您试图让您的用户写入文件系统上的文件。但是,默认情况下,文件夹和文档只对外部人员具有读取权限。因此,您需要向其他人授予您的数据库 (user.db) 及其文件夹 (./db) 可写访问权限。

因此,您需要转到目录并输入:

chmod 777 ./db
chmod 766 ./db/user.db

这对我来说解决了这个问题,所以我希望它也能帮助你。我不知道是否有更好的方法,但这似乎很合乎逻辑。

关于php - 无法通过 php PDO 插入 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4634823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com