请帮忙看看有什么问题….(我测试数据库连接是否正常)
<?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 db应该只能用于私有用途或仅用于服务器访问.某些系统未设置为安全地利用此功能.如果发现php没有写访问权限,并且没有对该计算机的root访问权限,则应考虑与系统管理员联系,或者如果可用的话,请切换到MySQL.
话虽如此,当数据库不敏感时,或者只有一小部分人知道的情况下,我发现以下解决方案对于快速原型解决方案非常有用.
我以前的回答:
我今天也遇到了同样的问题!我对php和sqlite还是很陌生,但是一直很忙.突然间,由于问题海报所描述的没有插入到我的sqlite数据库中,我遇到了巨大的障碍(一天都没有进展).此处的区别在于,没有错误消息或异常,如果将execute语句放入if子句中,则仅返回false.
因此,我终于能够找到一种使插入工作的方法,但是我不确定它是否安全.如果您认为有更好的方法,我将不胜感激.
主要问题是您试图让用户写入文件系统上的文件.但是,默认情况下,文件夹和文档仅对外部用户具有读取权限.因此,您需要同时授予数据库(user.db)及其文件夹(./db)可写访问权.
因此,您需要进入目录并输入:
chmod 777 ./db
chmod 766 ./db/user.db
那为我解决了这个问题,所以我希望它也能帮到您.我不知道是否有更好的方法,但这似乎很合逻辑.
标签:sqlite,php,pdo 来源: https://codeday.me/bug/20191023/1914249.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。