【发布时间】:2014-07-24 09:31:12
【问题描述】:
我正在使用 PHP 5.3.19 和 SQLite3,我似乎无法使用 PHP 向我的表中添加任何行,而且我也没有收到任何错误消息。我确实设法进行了选择,但 INSERTS 不起作用。
代码:
try {
$dbh = new PDO("sqlite:database.db");
$dbh->exec("INSERT INTO TABLE_NAME (COL1, COL2, COL3) VALUES (null, $var1, $var2)");
echo "Row added";
}
catch(PDOException $e) {
echo $e->getMessage();
echo "<br><br>Database <b>NOT</b> loaded successfully. ";
die( "<br><br>Query Closed! $error");
}
这会在没有任何错误消息的情况下执行,但不会保存条目。
目录归webservd所有,webservd可写,所以我真的不知道问题出在哪里。当我通过 CLI 运行 PHP 脚本时,它也不执行任何操作,但是如果我尝试手动输入行,它确实可以工作。
我查看了其他关于 PHP 和 SQLite3 的帖子,尤其是 Unable to write to a chmod 777 database file on SQlite3 via php 5.3.0 ,但找不到答案。
我错过了什么吗?
提前感谢您的帮助
【问题讨论】:
-
为什么不将PDO设置为异常模式,并在插入失败时捕获异常?此外, exec() 返回受影响的行数。你为什么不检查那个号码?捕捉异常会告诉你哪里出错了。正如 CodeSlayer 在他的回答中提到的那样 - 你没有引用插入的值。
-
我将它置于异常模式,但它不会抛出任何东西。
-
您发布的代码不是您在异常模式下设置 PDO 的方式。您现在遇到的另一个问题是您很容易受到 SQL 注入的影响。你接受这些变量作为用户输入还是什么?
-
我将它们作为变量传递给函数。值得到正确传递。为什么我容易发生 SQL 注入?
-
因为这些值没有被清理。这就是我们使用 PDO 的预处理语句并将值绑定到占位符的原因。然后 PDO 根据正在使用的数据库引擎/字符集为我们清理值。
标签: php sqlite php-5.3 sql-insert